forked from Minki/linux
Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/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()
This commit is contained in:
commit
45694c2895
@ -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));
|
||||
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user