libata: always do follow-up SRST if hardreset returned -EAGAIN
authorTejun Heo <tj@kernel.org>
Thu, 31 Jul 2008 07:08:02 +0000 (16:08 +0900)
committerJeff Garzik <jgarzik@redhat.com>
Fri, 22 Aug 2008 06:19:41 +0000 (02:19 -0400)
commit5dbfc9cb59d4ad75199949d7dd8a8c6d7bc518df
treeb0574dea3b5bfcf9418abb1a08bfe24a77fbcd37
parenta674050e068a2919908730279f0b731ae6d2e005
libata: always do follow-up SRST if hardreset returned -EAGAIN

As an optimization, follow-up SRST used to be skipped if
classification wasn't requested even when hardreset requested it via
-EAGAIN.  However, some hardresets can't wait for device readiness and
skipping SRST can cause timeout or other failures during revalidation.
Always perform follow-up SRST if hardreset returns -EAGAIN.  This
makes reset paths more predictable and thus less error-prone.

While at it, move hardreset error checking such that it's done right
after hardreset is finished.  This simplifies followup SRST condition
check a bit and makes the reset path easier to modify.

Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
drivers/ata/libata-eh.c