aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/device_handler/scsi_dh.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/scsi/device_handler/scsi_dh.c b/drivers/scsi/device_handler/scsi_dh.c
index 6fae3d285ae7..b837c5b3c8f9 100644
--- a/drivers/scsi/device_handler/scsi_dh.c
+++ b/drivers/scsi/device_handler/scsi_dh.c
@@ -442,12 +442,19 @@ int scsi_dh_activate(struct request_queue *q, activate_complete fn, void *data)
442 sdev = q->queuedata; 442 sdev = q->queuedata;
443 if (sdev && sdev->scsi_dh_data) 443 if (sdev && sdev->scsi_dh_data)
444 scsi_dh = sdev->scsi_dh_data->scsi_dh; 444 scsi_dh = sdev->scsi_dh_data->scsi_dh;
445 if (!scsi_dh || !get_device(&sdev->sdev_gendev)) 445 if (!scsi_dh || !get_device(&sdev->sdev_gendev) ||
446 sdev->sdev_state == SDEV_CANCEL ||
447 sdev->sdev_state == SDEV_DEL)
446 err = SCSI_DH_NOSYS; 448 err = SCSI_DH_NOSYS;
449 if (sdev->sdev_state == SDEV_OFFLINE)
450 err = SCSI_DH_DEV_OFFLINED;
447 spin_unlock_irqrestore(q->queue_lock, flags); 451 spin_unlock_irqrestore(q->queue_lock, flags);
448 452
449 if (err) 453 if (err) {
454 if (fn)
455 fn(data, err);
450 return err; 456 return err;
457 }
451 458
452 if (scsi_dh->activate) 459 if (scsi_dh->activate)
453 err = scsi_dh->activate(sdev, fn, data); 460 err = scsi_dh->activate(sdev, fn, data);