diff options
Diffstat (limited to 'drivers/ata/libata-eh.c')
-rw-r--r-- | drivers/ata/libata-eh.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index 228740f356c9..e48302eae55f 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c | |||
@@ -550,8 +550,8 @@ void ata_scsi_error(struct Scsi_Host *host) | |||
550 | 550 | ||
551 | DPRINTK("ENTER\n"); | 551 | DPRINTK("ENTER\n"); |
552 | 552 | ||
553 | /* synchronize with port task */ | 553 | /* make sure sff pio task is not running */ |
554 | ata_port_flush_task(ap); | 554 | ata_sff_flush_pio_task(ap); |
555 | 555 | ||
556 | /* synchronize with host lock and sort out timeouts */ | 556 | /* synchronize with host lock and sort out timeouts */ |
557 | 557 | ||
@@ -727,7 +727,7 @@ void ata_scsi_error(struct Scsi_Host *host) | |||
727 | if (ap->pflags & ATA_PFLAG_LOADING) | 727 | if (ap->pflags & ATA_PFLAG_LOADING) |
728 | ap->pflags &= ~ATA_PFLAG_LOADING; | 728 | ap->pflags &= ~ATA_PFLAG_LOADING; |
729 | else if (ap->pflags & ATA_PFLAG_SCSI_HOTPLUG) | 729 | else if (ap->pflags & ATA_PFLAG_SCSI_HOTPLUG) |
730 | queue_delayed_work(ata_aux_wq, &ap->hotplug_task, 0); | 730 | schedule_delayed_work(&ap->hotplug_task, 0); |
731 | 731 | ||
732 | if (ap->pflags & ATA_PFLAG_RECOVERED) | 732 | if (ap->pflags & ATA_PFLAG_RECOVERED) |
733 | ata_port_printk(ap, KERN_INFO, "EH complete\n"); | 733 | ata_port_printk(ap, KERN_INFO, "EH complete\n"); |
@@ -2214,6 +2214,7 @@ const char *ata_get_cmd_descript(u8 command) | |||
2214 | { ATA_CMD_SMART, "SMART" }, | 2214 | { ATA_CMD_SMART, "SMART" }, |
2215 | { ATA_CMD_MEDIA_LOCK, "DOOR LOCK" }, | 2215 | { ATA_CMD_MEDIA_LOCK, "DOOR LOCK" }, |
2216 | { ATA_CMD_MEDIA_UNLOCK, "DOOR UNLOCK" }, | 2216 | { ATA_CMD_MEDIA_UNLOCK, "DOOR UNLOCK" }, |
2217 | { ATA_CMD_DSM, "DATA SET MANAGEMENT" }, | ||
2217 | { ATA_CMD_CHK_MED_CRD_TYP, "CHECK MEDIA CARD TYPE" }, | 2218 | { ATA_CMD_CHK_MED_CRD_TYP, "CHECK MEDIA CARD TYPE" }, |
2218 | { ATA_CMD_CFA_REQ_EXT_ERR, "CFA REQUEST EXTENDED ERROR" }, | 2219 | { ATA_CMD_CFA_REQ_EXT_ERR, "CFA REQUEST EXTENDED ERROR" }, |
2219 | { ATA_CMD_CFA_WRITE_NE, "CFA WRITE SECTORS WITHOUT ERASE" }, | 2220 | { ATA_CMD_CFA_WRITE_NE, "CFA WRITE SECTORS WITHOUT ERASE" }, |
@@ -2944,7 +2945,7 @@ static int ata_eh_revalidate_and_attach(struct ata_link *link, | |||
2944 | ehc->i.flags |= ATA_EHI_SETMODE; | 2945 | ehc->i.flags |= ATA_EHI_SETMODE; |
2945 | 2946 | ||
2946 | /* schedule the scsi_rescan_device() here */ | 2947 | /* schedule the scsi_rescan_device() here */ |
2947 | queue_work(ata_aux_wq, &(ap->scsi_rescan_task)); | 2948 | schedule_work(&(ap->scsi_rescan_task)); |
2948 | } else if (dev->class == ATA_DEV_UNKNOWN && | 2949 | } else if (dev->class == ATA_DEV_UNKNOWN && |
2949 | ehc->tries[dev->devno] && | 2950 | ehc->tries[dev->devno] && |
2950 | ata_class_enabled(ehc->classes[dev->devno])) { | 2951 | ata_class_enabled(ehc->classes[dev->devno])) { |
@@ -3234,6 +3235,10 @@ static int ata_eh_skip_recovery(struct ata_link *link) | |||
3234 | if (link->flags & ATA_LFLAG_DISABLED) | 3235 | if (link->flags & ATA_LFLAG_DISABLED) |
3235 | return 1; | 3236 | return 1; |
3236 | 3237 | ||
3238 | /* skip if explicitly requested */ | ||
3239 | if (ehc->i.flags & ATA_EHI_NO_RECOVERY) | ||
3240 | return 1; | ||
3241 | |||
3237 | /* thaw frozen port and recover failed devices */ | 3242 | /* thaw frozen port and recover failed devices */ |
3238 | if ((ap->pflags & ATA_PFLAG_FROZEN) || ata_link_nr_enabled(link)) | 3243 | if ((ap->pflags & ATA_PFLAG_FROZEN) || ata_link_nr_enabled(link)) |
3239 | return 0; | 3244 | return 0; |
@@ -3684,7 +3689,7 @@ void ata_std_error_handler(struct ata_port *ap) | |||
3684 | ata_reset_fn_t hardreset = ops->hardreset; | 3689 | ata_reset_fn_t hardreset = ops->hardreset; |
3685 | 3690 | ||
3686 | /* ignore built-in hardreset if SCR access is not available */ | 3691 | /* ignore built-in hardreset if SCR access is not available */ |
3687 | if (ata_is_builtin_hardreset(hardreset) && !sata_scr_valid(&ap->link)) | 3692 | if (hardreset == sata_std_hardreset && !sata_scr_valid(&ap->link)) |
3688 | hardreset = NULL; | 3693 | hardreset = NULL; |
3689 | 3694 | ||
3690 | ata_do_eh(ap, ops->prereset, ops->softreset, hardreset, ops->postreset); | 3695 | ata_do_eh(ap, ops->prereset, ops->softreset, hardreset, ops->postreset); |