libata: clear saved xfer_mode and ncq_enabled on device detach
libata EH saves xfer_mode and ncq_enabled at start to later set DUBIOUS_XFER flag if it has changed. These values need to be cleared on device detach such that hot device swap doesn't accidentally miss DUBIOUS_XFER. Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
This commit is contained in:
parent
e8b3b5e9f5
commit
90484ebfc9
@ -1164,6 +1164,7 @@ void ata_eh_detach_dev(struct ata_device *dev)
|
|||||||
{
|
{
|
||||||
struct ata_link *link = dev->link;
|
struct ata_link *link = dev->link;
|
||||||
struct ata_port *ap = link->ap;
|
struct ata_port *ap = link->ap;
|
||||||
|
struct ata_eh_context *ehc = &link->eh_context;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
ata_dev_disable(dev);
|
ata_dev_disable(dev);
|
||||||
@ -1177,9 +1178,11 @@ void ata_eh_detach_dev(struct ata_device *dev)
|
|||||||
ap->pflags |= ATA_PFLAG_SCSI_HOTPLUG;
|
ap->pflags |= ATA_PFLAG_SCSI_HOTPLUG;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* clear per-dev EH actions */
|
/* clear per-dev EH info */
|
||||||
ata_eh_clear_action(link, dev, &link->eh_info, ATA_EH_PERDEV_MASK);
|
ata_eh_clear_action(link, dev, &link->eh_info, ATA_EH_PERDEV_MASK);
|
||||||
ata_eh_clear_action(link, dev, &link->eh_context.i, ATA_EH_PERDEV_MASK);
|
ata_eh_clear_action(link, dev, &link->eh_context.i, ATA_EH_PERDEV_MASK);
|
||||||
|
ehc->saved_xfer_mode[dev->devno] = 0;
|
||||||
|
ehc->saved_ncq_enabled &= ~(1 << dev->devno);
|
||||||
|
|
||||||
spin_unlock_irqrestore(ap->lock, flags);
|
spin_unlock_irqrestore(ap->lock, flags);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user