|
@@ -1079,12 +1079,6 @@ void ata_eh_about_to_do(struct ata_link *link, struct ata_device *dev,
|
|
|
|
|
|
spin_lock_irqsave(ap->lock, flags);
|
|
spin_lock_irqsave(ap->lock, flags);
|
|
|
|
|
|
- /* suck in and clear reset modifier */
|
|
|
|
- if (action & ATA_EH_RESET) {
|
|
|
|
- ehc->i.flags |= ehi->flags & ATA_EHI_RESET_MODIFIER_MASK;
|
|
|
|
- ehi->flags &= ~ATA_EHI_RESET_MODIFIER_MASK;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
ata_eh_clear_action(link, dev, ehi, action);
|
|
ata_eh_clear_action(link, dev, ehi, action);
|
|
|
|
|
|
if (!(ehc->i.flags & ATA_EHI_QUIET))
|
|
if (!(ehc->i.flags & ATA_EHI_QUIET))
|
|
@@ -1110,10 +1104,6 @@ void ata_eh_done(struct ata_link *link, struct ata_device *dev,
|
|
{
|
|
{
|
|
struct ata_eh_context *ehc = &link->eh_context;
|
|
struct ata_eh_context *ehc = &link->eh_context;
|
|
|
|
|
|
- /* if reset is complete, clear reset modifier */
|
|
|
|
- if (action & ATA_EH_RESET)
|
|
|
|
- ehc->i.flags &= ~ATA_EHI_RESET_MODIFIER_MASK;
|
|
|
|
-
|
|
|
|
ata_eh_clear_action(link, dev, &ehc->i, action);
|
|
ata_eh_clear_action(link, dev, &ehc->i, action);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2491,6 +2481,7 @@ static int ata_link_nr_vacant(struct ata_link *link)
|
|
|
|
|
|
static int ata_eh_skip_recovery(struct ata_link *link)
|
|
static int ata_eh_skip_recovery(struct ata_link *link)
|
|
{
|
|
{
|
|
|
|
+ struct ata_port *ap = link->ap;
|
|
struct ata_eh_context *ehc = &link->eh_context;
|
|
struct ata_eh_context *ehc = &link->eh_context;
|
|
struct ata_device *dev;
|
|
struct ata_device *dev;
|
|
|
|
|
|
@@ -2498,9 +2489,13 @@ static int ata_eh_skip_recovery(struct ata_link *link)
|
|
if (link->flags & ATA_LFLAG_DISABLED)
|
|
if (link->flags & ATA_LFLAG_DISABLED)
|
|
return 1;
|
|
return 1;
|
|
|
|
|
|
- /* thaw frozen port, resume link and recover failed devices */
|
|
|
|
- if ((link->ap->pflags & ATA_PFLAG_FROZEN) ||
|
|
|
|
- (ehc->i.flags & ATA_EHI_RESUME_LINK) || ata_link_nr_enabled(link))
|
|
|
|
|
|
+ /* thaw frozen port and recover failed devices */
|
|
|
|
+ if ((ap->pflags & ATA_PFLAG_FROZEN) || ata_link_nr_enabled(link))
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
|
|
+ /* reset at least once if reset is requested */
|
|
|
|
+ if ((ehc->i.action & ATA_EH_RESET) &&
|
|
|
|
+ !(ehc->i.flags & ATA_EHI_DID_RESET))
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
/* skip if class codes for all vacant slots are ATA_DEV_NONE */
|
|
/* skip if class codes for all vacant slots are ATA_DEV_NONE */
|