mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
libata: ata_dev_disable() should be called from EH context
ata_port_detach() calls ata_dev_disable() with host lock held but ata_dev_disable() should be called from EH context. ata_port_detach() steals EH context by setting ATA_PFLAG_UNLOADAING and flushing EH. Drop locking around ata_dev_disable() and note that ata_port_detach() owns EH context at that point. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
ce2e0abbd3
commit
7f9ad9b8b9
1 changed files with 2 additions and 6 deletions
|
@ -7210,18 +7210,14 @@ static void ata_port_detach(struct ata_port *ap)
|
|||
|
||||
ata_port_wait_eh(ap);
|
||||
|
||||
/* EH is now guaranteed to see UNLOADING, so no new device
|
||||
* will be attached. Disable all existing devices.
|
||||
/* EH is now guaranteed to see UNLOADING - EH context belongs
|
||||
* to us. Disable all existing devices.
|
||||
*/
|
||||
spin_lock_irqsave(ap->lock, flags);
|
||||
|
||||
ata_port_for_each_link(link, ap) {
|
||||
ata_link_for_each_dev(dev, link)
|
||||
ata_dev_disable(dev);
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(ap->lock, flags);
|
||||
|
||||
/* Final freeze & EH. All in-flight commands are aborted. EH
|
||||
* will be skipped and retrials will be terminated with bad
|
||||
* target.
|
||||
|
|
Loading…
Reference in a new issue