summaryrefslogtreecommitdiffstats
path: root/sys/dev/vinum
diff options
context:
space:
mode:
authorgrog <grog@FreeBSD.org>2002-12-12 01:03:45 +0000
committergrog <grog@FreeBSD.org>2002-12-12 01:03:45 +0000
commitd483f1ceb2a787a7cd9408b71bbf49fd5d6c8c57 (patch)
tree9f05d5bac7878f44fac9738f9d84515a9754b4e5 /sys/dev/vinum
parentb45b4e9e9ed7f3934c8cc78762585c6d71bba9ae (diff)
downloadFreeBSD-src-d483f1ceb2a787a7cd9408b71bbf49fd5d6c8c57.zip
FreeBSD-src-d483f1ceb2a787a7cd9408b71bbf49fd5d6c8c57.tar.gz
revive_block: If we have an I/O error, don't forget to drop the stripe lock.
Approved by: re (jhb)
Diffstat (limited to 'sys/dev/vinum')
-rw-r--r--sys/dev/vinum/vinumrevive.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/dev/vinum/vinumrevive.c b/sys/dev/vinum/vinumrevive.c
index d74d5d3..8e6410e 100644
--- a/sys/dev/vinum/vinumrevive.c
+++ b/sys/dev/vinum/vinumrevive.c
@@ -169,9 +169,11 @@ revive_block(int sdno)
bufwait(bp);
}
- if (bp->b_ioflags & BIO_ERROR)
+ if (bp->b_ioflags & BIO_ERROR) {
error = bp->b_error;
- else
+ if (lock) /* we took a lock, */
+ unlockrange(sd->plexno, lock); /* give it back */
+ } else
/* Now write to the subdisk */
{
bp->b_dev = VINUM_SD(sdno); /* create the device number */
OpenPOWER on IntegriCloud