diff options
author | Tejun Heo <htejun@gmail.com> | 2006-08-05 03:59:11 +0900 |
---|---|---|
committer | Tejun Heo <htejun@gmail.com> | 2006-08-05 03:59:11 +0900 |
commit | c3cf30a989efec8144225517e0b2f82c955e3966 (patch) | |
tree | 0f4a134253a6e6d306509d617201dbea346b9536 /drivers/scsi/libata-core.c | |
parent | f1d39b291e2263f5e2f2ec5d4061802f76d8ae67 (diff) |
[PATCH] libata: fix ata_port_detach() for old EH ports
ata_prot_detach() did nothing for old EH ports and thus SCSI hosts
associated with those ports are left dangling after they are detached
leaving stale devices and causing oops eventually. Make
ata_port_detach() remove SCSI hosts for old EH ports.
Signed-off-by: Tejun Heo <htejun@gmail.com>
Diffstat (limited to 'drivers/scsi/libata-core.c')
-rw-r--r-- | drivers/scsi/libata-core.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c index 386e5f21e19..bca92dd3a45 100644 --- a/drivers/scsi/libata-core.c +++ b/drivers/scsi/libata-core.c @@ -5558,7 +5558,7 @@ void ata_port_detach(struct ata_port *ap) int i; if (!ap->ops->error_handler) - return; + goto skip_eh; /* tell EH we're leaving & flush EH */ spin_lock_irqsave(ap->lock, flags); @@ -5594,6 +5594,7 @@ void ata_port_detach(struct ata_port *ap) cancel_delayed_work(&ap->hotplug_task); flush_workqueue(ata_aux_wq); + skip_eh: /* remove the associated SCSI host */ scsi_remove_host(ap->host); } |