diff options
author | Tejun Heo <htejun@gmail.com> | 2006-05-31 05:28:05 -0400 |
---|---|---|
committer | Tejun Heo <htejun@gmail.com> | 2006-05-31 05:28:05 -0400 |
commit | 580b2102327ab8444af5bde4e70b50d268a1d558 (patch) | |
tree | 01389e898e09dbaddb06405b182116b9be0e6d59 /drivers/scsi/libata-eh.c | |
parent | 084fe639b81c4d418a2cf714acb0475e3713cb73 (diff) |
[PATCH] libata-hp: implement SCSI part of hotplug
Implement SCSI part of hotplug.
This must be done in a separate context as SCSI makes use of EH during
probing. SCSI scan fails silently if EH is in progress. In such
cases, libata pauses briefly and retries until every device is
attached.
Signed-off-by: Tejun Heo <htejun@gmail.com>
Diffstat (limited to 'drivers/scsi/libata-eh.c')
-rw-r--r-- | drivers/scsi/libata-eh.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/scsi/libata-eh.c b/drivers/scsi/libata-eh.c index b53e2e7db498..733dfa532977 100644 --- a/drivers/scsi/libata-eh.c +++ b/drivers/scsi/libata-eh.c | |||
@@ -287,9 +287,13 @@ void ata_scsi_error(struct Scsi_Host *host) | |||
287 | /* clean up */ | 287 | /* clean up */ |
288 | spin_lock_irqsave(hs_lock, flags); | 288 | spin_lock_irqsave(hs_lock, flags); |
289 | 289 | ||
290 | if (ap->flags & ATA_FLAG_SCSI_HOTPLUG) | ||
291 | queue_work(ata_aux_wq, &ap->hotplug_task); | ||
292 | |||
290 | if (ap->flags & ATA_FLAG_RECOVERED) | 293 | if (ap->flags & ATA_FLAG_RECOVERED) |
291 | ata_port_printk(ap, KERN_INFO, "EH complete\n"); | 294 | ata_port_printk(ap, KERN_INFO, "EH complete\n"); |
292 | ap->flags &= ~ATA_FLAG_RECOVERED; | 295 | |
296 | ap->flags &= ~(ATA_FLAG_SCSI_HOTPLUG | ATA_FLAG_RECOVERED); | ||
293 | 297 | ||
294 | /* tell wait_eh that we're done */ | 298 | /* tell wait_eh that we're done */ |
295 | ap->flags &= ~ATA_FLAG_EH_IN_PROGRESS; | 299 | ap->flags &= ~ATA_FLAG_EH_IN_PROGRESS; |