diff options
author | Tejun Heo <tj@kernel.org> | 2008-10-26 02:43:03 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@redhat.com> | 2008-10-27 23:55:40 -0400 |
commit | 90484ebfc96c5dc5c498ed72cf2d370575db9b76 (patch) | |
tree | 46ada261a4d318296bcbe08ac724fd32eb014a6d /drivers | |
parent | e8b3b5e9f54512bfdb7c154da07ec0408cbd6c56 (diff) |
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>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/ata/libata-eh.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index a6a3b1554c45..8077bdf5d30d 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c | |||
@@ -1164,6 +1164,7 @@ void ata_eh_detach_dev(struct ata_device *dev) | |||
1164 | { | 1164 | { |
1165 | struct ata_link *link = dev->link; | 1165 | struct ata_link *link = dev->link; |
1166 | struct ata_port *ap = link->ap; | 1166 | struct ata_port *ap = link->ap; |
1167 | struct ata_eh_context *ehc = &link->eh_context; | ||
1167 | unsigned long flags; | 1168 | unsigned long flags; |
1168 | 1169 | ||
1169 | ata_dev_disable(dev); | 1170 | ata_dev_disable(dev); |
@@ -1177,9 +1178,11 @@ void ata_eh_detach_dev(struct ata_device *dev) | |||
1177 | ap->pflags |= ATA_PFLAG_SCSI_HOTPLUG; | 1178 | ap->pflags |= ATA_PFLAG_SCSI_HOTPLUG; |
1178 | } | 1179 | } |
1179 | 1180 | ||
1180 | /* clear per-dev EH actions */ | 1181 | /* clear per-dev EH info */ |
1181 | ata_eh_clear_action(link, dev, &link->eh_info, ATA_EH_PERDEV_MASK); | 1182 | ata_eh_clear_action(link, dev, &link->eh_info, ATA_EH_PERDEV_MASK); |
1182 | ata_eh_clear_action(link, dev, &link->eh_context.i, ATA_EH_PERDEV_MASK); | 1183 | ata_eh_clear_action(link, dev, &link->eh_context.i, ATA_EH_PERDEV_MASK); |
1184 | ehc->saved_xfer_mode[dev->devno] = 0; | ||
1185 | ehc->saved_ncq_enabled &= ~(1 << dev->devno); | ||
1183 | 1186 | ||
1184 | spin_unlock_irqrestore(ap->lock, flags); | 1187 | spin_unlock_irqrestore(ap->lock, flags); |
1185 | } | 1188 | } |