diff options
author | scottl <scottl@FreeBSD.org> | 2001-09-02 23:16:40 +0000 |
---|---|---|
committer | scottl <scottl@FreeBSD.org> | 2001-09-02 23:16:40 +0000 |
commit | dce76a6ecd3574d5f1614cfa6ab477ecbe4d87d8 (patch) | |
tree | cdda4be7b1a525e936c07a604ba7277168b2af33 /sys/dev/aac/aac_disk.c | |
parent | af95162b3a2e7e10e4e665b1d6656f941c1275d5 (diff) | |
download | FreeBSD-src-dce76a6ecd3574d5f1614cfa6ab477ecbe4d87d8.zip FreeBSD-src-dce76a6ecd3574d5f1614cfa6ab477ecbe4d87d8.tar.gz |
Work around a bug where the driver's copy of the disklabel gets corrupted
and causes diskerr() to panic.
Diffstat (limited to 'sys/dev/aac/aac_disk.c')
-rw-r--r-- | sys/dev/aac/aac_disk.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/sys/dev/aac/aac_disk.c b/sys/dev/aac/aac_disk.c index 931be9d..a5a70da 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); |