From 1ebb18e1fc3217a18f9e17fec03ceb3b076abd4f Mon Sep 17 00:00:00 2001 From: Menny Hamburger Date: Thu, 16 Dec 2010 14:57:07 -0500 Subject: [PATCH] --- yaml --- r: 226853 b: refs/heads/master c: db422318cbca55168cf965f655471dbf8be82433 h: refs/heads/master i: 226851: 274054e7d75ef411c129b894ac54b986cce0abe8 v: v3 --- [refs] | 2 +- trunk/drivers/scsi/device_handler/scsi_dh.c | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index bc696919e9e5..9f2ee7f667e3 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 35dd3039e09cd46ca3a8733ff1c817bf7b7b19ce +refs/heads/master: db422318cbca55168cf965f655471dbf8be82433 diff --git a/trunk/drivers/scsi/device_handler/scsi_dh.c b/trunk/drivers/scsi/device_handler/scsi_dh.c index 6fae3d285ae7..b837c5b3c8f9 100644 --- a/trunk/drivers/scsi/device_handler/scsi_dh.c +++ b/trunk/drivers/scsi/device_handler/scsi_dh.c @@ -442,12 +442,19 @@ int scsi_dh_activate(struct request_queue *q, activate_complete fn, void *data) sdev = q->queuedata; if (sdev && sdev->scsi_dh_data) scsi_dh = sdev->scsi_dh_data->scsi_dh; - if (!scsi_dh || !get_device(&sdev->sdev_gendev)) + if (!scsi_dh || !get_device(&sdev->sdev_gendev) || + sdev->sdev_state == SDEV_CANCEL || + sdev->sdev_state == SDEV_DEL) err = SCSI_DH_NOSYS; + if (sdev->sdev_state == SDEV_OFFLINE) + err = SCSI_DH_DEV_OFFLINED; spin_unlock_irqrestore(q->queue_lock, flags); - if (err) + if (err) { + if (fn) + fn(data, err); return err; + } if (scsi_dh->activate) err = scsi_dh->activate(sdev, fn, data);