[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>
This commit is contained in:
parent
f1d39b291e
commit
c3cf30a989
1 changed files with 2 additions and 1 deletions
|
@ -5558,7 +5558,7 @@ void ata_port_detach(struct ata_port *ap)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (!ap->ops->error_handler)
|
if (!ap->ops->error_handler)
|
||||||
return;
|
goto skip_eh;
|
||||||
|
|
||||||
/* tell EH we're leaving & flush EH */
|
/* tell EH we're leaving & flush EH */
|
||||||
spin_lock_irqsave(ap->lock, flags);
|
spin_lock_irqsave(ap->lock, flags);
|
||||||
|
@ -5594,6 +5594,7 @@ void ata_port_detach(struct ata_port *ap)
|
||||||
cancel_delayed_work(&ap->hotplug_task);
|
cancel_delayed_work(&ap->hotplug_task);
|
||||||
flush_workqueue(ata_aux_wq);
|
flush_workqueue(ata_aux_wq);
|
||||||
|
|
||||||
|
skip_eh:
|
||||||
/* remove the associated SCSI host */
|
/* remove the associated SCSI host */
|
||||||
scsi_remove_host(ap->host);
|
scsi_remove_host(ap->host);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue