]> err.no Git - linux-2.6/blobdiff - drivers/ata/libata-eh.c
WorkStruct: Separate delayable and non-delayable events.
[linux-2.6] / drivers / ata / libata-eh.c
index 3fa80f09f2ae8edf283b36e4553a7c9b119ea1e8..9f6b7cc74fd9159a241e661932211e71ed97e650 100644 (file)
@@ -332,7 +332,7 @@ void ata_scsi_error(struct Scsi_Host *host)
        if (ap->pflags & ATA_PFLAG_LOADING)
                ap->pflags &= ~ATA_PFLAG_LOADING;
        else if (ap->pflags & ATA_PFLAG_SCSI_HOTPLUG)
-               queue_work(ata_aux_wq, &ap->hotplug_task);
+               queue_delayed_work(ata_aux_wq, &ap->hotplug_task, 0);
 
        if (ap->pflags & ATA_PFLAG_RECOVERED)
                ata_port_printk(ap, KERN_INFO, "EH complete\n");
@@ -1515,7 +1515,11 @@ static int ata_eh_reset(struct ata_port *ap, int classify,
        if (prereset) {
                rc = prereset(ap);
                if (rc) {
-                       ata_port_printk(ap, KERN_ERR,
+                       if (rc == -ENOENT) {
+                               ata_port_printk(ap, KERN_DEBUG, "port disabled. ignoring.\n");
+                               ap->eh_context.i.action &= ~ATA_EH_RESET_MASK;
+                       } else
+                               ata_port_printk(ap, KERN_ERR,
                                        "prereset failed (errno=%d)\n", rc);
                        return rc;
                }