diff options
author | James Bottomley <James.Bottomley@steeleye.com> | 2005-09-18 16:05:20 -0400 |
---|---|---|
committer | James Bottomley <jejb@titanic.(none)> | 2005-09-19 10:24:52 -0400 |
commit | 939647ee308e0ad924e776657704c7bedd498664 (patch) | |
tree | cfff68b8f65a53e186fd1e7443aa370885ac1ed9 /drivers/scsi/scsi_lib.c | |
parent | a64358db1253b35d508a411e80a3ad23b859ec88 (diff) |
[SCSI] fix oops on usb storage device disconnect
We fix the oops by enforcing the host state model. There have also
been two extra states added: SHOST_CANCEL_RECOVERY and
SHOST_DEL_RECOVERY so we can take the model through host removal while
the recovery thread is active.
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/scsi_lib.c')
-rw-r--r-- | drivers/scsi/scsi_lib.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index f065cbc1a6e5..dc9c772bc874 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c | |||
@@ -447,7 +447,7 @@ void scsi_device_unbusy(struct scsi_device *sdev) | |||
447 | 447 | ||
448 | spin_lock_irqsave(shost->host_lock, flags); | 448 | spin_lock_irqsave(shost->host_lock, flags); |
449 | shost->host_busy--; | 449 | shost->host_busy--; |
450 | if (unlikely((shost->shost_state == SHOST_RECOVERY) && | 450 | if (unlikely(scsi_host_in_recovery(shost) && |
451 | shost->host_failed)) | 451 | shost->host_failed)) |
452 | scsi_eh_wakeup(shost); | 452 | scsi_eh_wakeup(shost); |
453 | spin_unlock(shost->host_lock); | 453 | spin_unlock(shost->host_lock); |
@@ -1339,7 +1339,7 @@ static inline int scsi_host_queue_ready(struct request_queue *q, | |||
1339 | struct Scsi_Host *shost, | 1339 | struct Scsi_Host *shost, |
1340 | struct scsi_device *sdev) | 1340 | struct scsi_device *sdev) |
1341 | { | 1341 | { |
1342 | if (shost->shost_state == SHOST_RECOVERY) | 1342 | if (scsi_host_in_recovery(shost)) |
1343 | return 0; | 1343 | return 0; |
1344 | if (shost->host_busy == 0 && shost->host_blocked) { | 1344 | if (shost->host_busy == 0 && shost->host_blocked) { |
1345 | /* | 1345 | /* |