Skip to content

Commit

Permalink
Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/k…
Browse files Browse the repository at this point in the history
…ernel/git/jgarzik/libata-dev

* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev:
  libata: fix unexpectedly frozen port after ata_eh_reset()
  • Loading branch information
Linus Torvalds committed Jun 10, 2011
2 parents 7f45e5c + 8c56cac commit 45694c2
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions drivers/ata/libata-eh.c
Original file line number Diff line number Diff line change
Expand Up @@ -2802,10 +2802,11 @@ int ata_eh_reset(struct ata_link *link, int classify,
}

/*
* Some controllers can't be frozen very well and may set
* spuruious error conditions during reset. Clear accumulated
* error information. As reset is the final recovery action,
* nothing is lost by doing this.
* Some controllers can't be frozen very well and may set spurious
* error conditions during reset. Clear accumulated error
* information and re-thaw the port if frozen. As reset is the
* final recovery action and we cross check link onlineness against
* device classification later, no hotplug event is lost by this.
*/
spin_lock_irqsave(link->ap->lock, flags);
memset(&link->eh_info, 0, sizeof(link->eh_info));
Expand All @@ -2814,6 +2815,9 @@ int ata_eh_reset(struct ata_link *link, int classify,
ap->pflags &= ~ATA_PFLAG_EH_PENDING;
spin_unlock_irqrestore(link->ap->lock, flags);

if (ap->pflags & ATA_PFLAG_FROZEN)
ata_eh_thaw_port(ap);

/*
* Make sure onlineness and classification result correspond.
* Hotplug could have happened during reset and some
Expand Down

0 comments on commit 45694c2

Please sign in to comment.