diff options
Diffstat (limited to 'sys/dev/mfi/mfi_disk.c')
-rw-r--r-- | sys/dev/mfi/mfi_disk.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/sys/dev/mfi/mfi_disk.c b/sys/dev/mfi/mfi_disk.c index 4594ca2..b9d44a3 100644 --- a/sys/dev/mfi/mfi_disk.c +++ b/sys/dev/mfi/mfi_disk.c @@ -223,7 +223,7 @@ mfi_disk_disable(struct mfi_disk *sc) if (sc->ld_flags & MFI_DISK_FLAGS_OPEN) { if (sc->ld_controller->mfi_delete_busy_volumes) return (0); - device_printf(sc->ld_dev, "Unable to delete busy device\n"); + device_printf(sc->ld_dev, "Unable to delete busy ld device\n"); return (EBUSY); } sc->ld_flags |= MFI_DISK_FLAGS_DISABLED; @@ -245,6 +245,7 @@ mfi_disk_strategy(struct bio *bio) struct mfi_softc *controller; sc = bio->bio_disk->d_drv1; + controller = sc->ld_controller; if (sc == NULL) { bio->bio_error = EINVAL; @@ -254,8 +255,24 @@ mfi_disk_strategy(struct bio *bio) return; } - controller = sc->ld_controller; + if (controller->adpreset){ + bio->bio_error = EBUSY; + return; + } + + if (controller->hw_crit_error){ + bio->bio_error = EBUSY; + return; + } + + if (controller->issuepend_done == 0){ + bio->bio_error = EBUSY; + return; + } + bio->bio_driver1 = (void *)(uintptr_t)sc->ld_id; + /* Mark it as LD IO */ + bio->bio_driver2 = (void *)MFI_LD_IO; mtx_lock(&controller->mfi_io_lock); mfi_enqueue_bio(controller, bio); mfi_startio(controller); |