⬢ DragonFlyBSD Kernel Audit
DF-5012 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/raid/mfi/mfi_disk.c b/sys/dev/raid/mfi/mfi_disk.c
--- a/sys/dev/raid/mfi/mfi_disk.c
+++ b/sys/dev/raid/mfi/mfi_disk.c
@@ -265,12 +265,12 @@ mfi_disk_strategy(struct dev_strategy_args *ap)
 
 	if (controller->hw_crit_error) {
 		bp->b_error = EBUSY;
-		return (0);
+		goto fail;
 	}
 
 	if (controller->issuepend_done == 0) {
 		bp->b_error = EBUSY;
-		return (0);
+		goto fail;
 	}
 
 	/*
@@ -299,6 +299,12 @@ mfi_disk_strategy(struct dev_strategy_args *ap)
 	mfi_startio(controller);
 	lockmgr(&controller->mfi_io_lock, LK_RELEASE);
 	return (0);
+
+fail:
+	bp->b_flags |= B_ERROR;
+	bp->b_resid = bp->b_bcount;
+	biodone(bio);
+	return (0);
 }
 
 void