[PATCH] libata: fix ata_port_detach() for old EH ports
authorTejun Heo <htejun@gmail.com>
Fri, 4 Aug 2006 18:59:11 +0000 (03:59 +0900)
committerTejun Heo <htejun@gmail.com>
Fri, 4 Aug 2006 18:59:11 +0000 (03:59 +0900)
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>
drivers/scsi/libata-core.c

index 386e5f21e191894da37dbaa44d58d5ad6769fd81..bca92dd3a454a7e29512b9c168ec4bd6c02c3f92 100644 (file)
@@ -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);
 }