]> git.karo-electronics.de Git - karo-tx-linux.git/commit
libata: fix unexpectedly frozen port after ata_eh_reset()
authorTejun Heo <tj@kernel.org>
Wed, 25 May 2011 11:19:39 +0000 (13:19 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 8 Aug 2011 17:35:51 +0000 (10:35 -0700)
commit2a1584ac52bfeda0f3fcc5b08b17e468655c4f5b
tree28e2b60cfc189e9d0b33b7d5e1466901ecaa1653
parentb5fde41a89eb649073c7386a1b10b1271a7babc0
libata: fix unexpectedly frozen port after ata_eh_reset()

commit 8c56cacc724c7650b893d43068fa66044aa29a61 upstream.

To work around controllers which can't properly plug events while
reset, ata_eh_reset() clears error states and ATA_PFLAG_EH_PENDING
after reset but before RESET is marked done.  As reset is the final
recovery action and full verification of devices including onlineness
and classfication match is done afterwards, this shouldn't lead to
lost devices or missed hotplug events.

Unfortunately, it forgot to thaw the port when clearing EH_PENDING, so
if the condition happens after resetting an empty port, the port could
be left frozen and EH will end without thawing it, making the port
unresponsive to further hotplug events.

Thaw if the port is frozen after clearing EH_PENDING.  This problem is
reported by Bruce Stenning in the following thread.

 http://thread.gmane.org/gmane.linux.kernel/1123265

stable: I think we should weather this patch a bit longer in -rcX
before sending it to -stable.  Please wait at least a month
after this patch makes upstream.  Thanks.

-v2: Fixed spelling in the comment per Dave Howorth.

Signed-off-by: Tejun Heo <tj@kernel.org>
Reported-by: Bruce Stenning <b.stenning@indigovision.com>
Cc: Dave Howorth <dhoworth@mrc-lmb.cam.ac.uk>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/ata/libata-eh.c