From 61fea3829341d3a0a468e2e0267e3fcd10d49cc1 Mon Sep 17 00:00:00 2001 From: Scott Long Date: Sun, 2 Sep 2001 23:16:40 +0000 Subject: [PATCH] Work around a bug where the driver's copy of the disklabel gets corrupted and causes diskerr() to panic. --- sys/dev/aac/aac_disk.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/sys/dev/aac/aac_disk.c b/sys/dev/aac/aac_disk.c index 931be9d8864..a5a70da2451 100644 --- a/sys/dev/aac/aac_disk.c +++ b/sys/dev/aac/aac_disk.c @@ -294,10 +294,15 @@ aac_biodone(struct bio *bp) devstat_end_transaction_bio(&sc->ad_stats, bp); if (bp->bio_flags & BIO_ERROR) { + /* + * XXX For some reason, the disklabel seems to get zero'd out. This + * will cause diskerr to panic unless we pass in -1 as the blkno. + */ + int blkno = (sc->ad_label.d_nsectors) ? 0 : -1; #if __FreeBSD_version > 500005 - diskerr(bp, (char *)bp->bio_driver1, 0, &sc->ad_label); + diskerr(bp, (char *)bp->bio_driver1, blkno, &sc->ad_label); #else - diskerr(bp, (char *)bp->bio_driver1, 0, -1, &sc->ad_label); + diskerr(bp, (char *)bp->bio_driver1, 0, blkno, &sc->ad_label); #endif } biodone(bp);