aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata/libata-eh.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ata/libata-eh.c')
-rw-r--r--drivers/ata/libata-eh.c21
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
2492static int ata_eh_skip_recovery(struct ata_link *link) 2482static 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 */