summaryrefslogtreecommitdiffstats
path: root/drivers/scsi/scsi_lib.c
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2006-05-15 20:57:20 +0900
committerTejun Heo <htejun@gmail.com>2006-05-15 20:57:20 +0900
commitee7863bc68fa6ad6fe7cfcc0e5ebe9efe0c0664e (patch)
tree2ca442445403be0101abf0592df3c625633dd49d /drivers/scsi/scsi_lib.c
parent89f48c4d67dd875cf2216d4402bf77eda41fbdd9 (diff)
downloadlinux-ee7863bc68fa6ad6fe7cfcc0e5ebe9efe0c0664e.tar.gz
linux-ee7863bc68fa6ad6fe7cfcc0e5ebe9efe0c0664e.tar.bz2
linux-ee7863bc68fa6ad6fe7cfcc0e5ebe9efe0c0664e.zip
[PATCH] SCSI: implement shost->host_eh_scheduled
libata needs to invoke EH without scmd. This patch adds shost->host_eh_scheduled to implement such behavior. Currently the only user of this feature is libata and no general interface is defined. This patch simply adds handling for host_eh_scheduled where needed and exports scsi_eh_wakeup() to modules. The rest is upto libata. This is the result of the following discussion. http://thread.gmane.org/gmane.linux.scsi/23853/focus=9760 In short, SCSI host is not supposed to know about exceptions unrelated to specific device or command. Such exceptions should be handled by transport layer proper. However, the distinction is not essential to ATA and libata is planning to depart from SCSI, so, for the time being, libata will be using SCSI EH to handle such exceptions. Signed-off-by: Tejun Heo <htejun@gmail.com>
Diffstat (limited to 'drivers/scsi/scsi_lib.c')
-rw-r--r--drivers/scsi/scsi_lib.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 7b0f9a3810d2..c55d195b6f4f 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -566,7 +566,7 @@ void scsi_device_unbusy(struct scsi_device *sdev)
spin_lock_irqsave(shost->host_lock, flags);
shost->host_busy--;
if (unlikely(scsi_host_in_recovery(shost) &&
- shost->host_failed))
+ (shost->host_failed || shost->host_eh_scheduled)))
scsi_eh_wakeup(shost);
spin_unlock(shost->host_lock);
spin_lock(sdev->request_queue->queue_lock);