]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/scsi/libata-eh.c
Merge master.kernel.org:/pub/scm/linux/kernel/git/davej/cpufreq
[karo-tx-linux.git] / drivers / scsi / libata-eh.c
index 126be36289a77816edac83f5551d961cd23a5601..bf5a72aca8a4979957ae9a7ce8ff519d70490655 100644 (file)
@@ -93,6 +93,13 @@ static int ata_ering_map(struct ata_ering *ering,
        return rc;
 }
 
+static unsigned int ata_eh_dev_action(struct ata_device *dev)
+{
+       struct ata_eh_context *ehc = &dev->ap->eh_context;
+
+       return ehc->i.action | ehc->i.dev_action[dev->devno];
+}
+
 static void ata_eh_clear_action(struct ata_device *dev,
                                struct ata_eh_info *ehi, unsigned int action)
 {
@@ -727,6 +734,10 @@ static void ata_eh_detach_dev(struct ata_device *dev)
                ap->flags |= ATA_FLAG_SCSI_HOTPLUG;
        }
 
+       /* clear per-dev EH actions */
+       ata_eh_clear_action(dev, &ap->eh_info, ATA_EH_PERDEV_MASK);
+       ata_eh_clear_action(dev, &ap->eh_context.i, ATA_EH_PERDEV_MASK);
+
        spin_unlock_irqrestore(ap->lock, flags);
 }
 
@@ -1592,7 +1603,7 @@ static int ata_eh_revalidate_and_attach(struct ata_port *ap,
                unsigned int action;
 
                dev = &ap->device[i];
-               action = ehc->i.action | ehc->i.dev_action[dev->devno];
+               action = ata_eh_dev_action(dev);
 
                if (action & ATA_EH_REVALIDATE && ata_dev_enabled(dev)) {
                        if (ata_port_offline(ap)) {