提交 c3cf30a9 编写于 作者: T Tejun Heo

[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: NTejun Heo <htejun@gmail.com>
上级 f1d39b29
...@@ -5558,7 +5558,7 @@ void ata_port_detach(struct ata_port *ap) ...@@ -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) ...@@ -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);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册