diff options
Diffstat (limited to 'drivers/ata/libata-eh.c')
-rw-r--r-- | drivers/ata/libata-eh.c | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index f7cae6400155..e6584fa7f456 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c | |||
@@ -1079,12 +1079,6 @@ void ata_eh_about_to_do(struct ata_link *link, struct ata_device *dev, | |||
1079 | 1079 | ||
1080 | spin_lock_irqsave(ap->lock, flags); | 1080 | spin_lock_irqsave(ap->lock, flags); |
1081 | 1081 | ||
1082 | /* suck in and clear reset modifier */ | ||
1083 | if (action & ATA_EH_RESET) { | ||
1084 | ehc->i.flags |= ehi->flags & ATA_EHI_RESET_MODIFIER_MASK; | ||
1085 | ehi->flags &= ~ATA_EHI_RESET_MODIFIER_MASK; | ||
1086 | } | ||
1087 | |||
1088 | ata_eh_clear_action(link, dev, ehi, action); | 1082 | ata_eh_clear_action(link, dev, ehi, action); |
1089 | 1083 | ||
1090 | if (!(ehc->i.flags & ATA_EHI_QUIET)) | 1084 | if (!(ehc->i.flags & ATA_EHI_QUIET)) |
@@ -1110,10 +1104,6 @@ void ata_eh_done(struct ata_link *link, struct ata_device *dev, | |||
1110 | { | 1104 | { |
1111 | struct ata_eh_context *ehc = &link->eh_context; | 1105 | struct ata_eh_context *ehc = &link->eh_context; |
1112 | 1106 | ||
1113 | /* if reset is complete, clear reset modifier */ | ||
1114 | if (action & ATA_EH_RESET) | ||
1115 | ehc->i.flags &= ~ATA_EHI_RESET_MODIFIER_MASK; | ||
1116 | |||
1117 | ata_eh_clear_action(link, dev, &ehc->i, action); | 1107 | ata_eh_clear_action(link, dev, &ehc->i, action); |
1118 | } | 1108 | } |
1119 | 1109 | ||
@@ -2491,6 +2481,7 @@ static int ata_link_nr_vacant(struct ata_link *link) | |||
2491 | 2481 | ||
2492 | static int ata_eh_skip_recovery(struct ata_link *link) | 2482 | static int ata_eh_skip_recovery(struct ata_link *link) |
2493 | { | 2483 | { |
2484 | struct ata_port *ap = link->ap; | ||
2494 | struct ata_eh_context *ehc = &link->eh_context; | 2485 | struct ata_eh_context *ehc = &link->eh_context; |
2495 | struct ata_device *dev; | 2486 | struct ata_device *dev; |
2496 | 2487 | ||
@@ -2498,9 +2489,13 @@ static int ata_eh_skip_recovery(struct ata_link *link) | |||
2498 | if (link->flags & ATA_LFLAG_DISABLED) | 2489 | if (link->flags & ATA_LFLAG_DISABLED) |
2499 | return 1; | 2490 | return 1; |
2500 | 2491 | ||
2501 | /* thaw frozen port, resume link and recover failed devices */ | 2492 | /* thaw frozen port and recover failed devices */ |
2502 | if ((link->ap->pflags & ATA_PFLAG_FROZEN) || | 2493 | if ((ap->pflags & ATA_PFLAG_FROZEN) || ata_link_nr_enabled(link)) |
2503 | (ehc->i.flags & ATA_EHI_RESUME_LINK) || ata_link_nr_enabled(link)) | 2494 | return 0; |
2495 | |||
2496 | /* reset at least once if reset is requested */ | ||
2497 | if ((ehc->i.action & ATA_EH_RESET) && | ||
2498 | !(ehc->i.flags & ATA_EHI_DID_RESET)) | ||
2504 | return 0; | 2499 | return 0; |
2505 | 2500 | ||
2506 | /* skip if class codes for all vacant slots are ATA_DEV_NONE */ | 2501 | /* skip if class codes for all vacant slots are ATA_DEV_NONE */ |