[PATCH] libata: check if port is disabled after internal command
authorTejun Heo <htejun@gmail.com>
Fri, 24 Mar 2006 06:25:30 +0000 (15:25 +0900)
committerJeff Garzik <jeff@garzik.org>
Fri, 24 Mar 2006 14:39:57 +0000 (09:39 -0500)
commit1f7dd3e9d62b25c7b79f913f37c2242a61295de4
tree7fc6cfaeca33cdae056a3ed69f841327391c9e8e
parent5a529139554f12cb265715117a2153c936286294
[PATCH] libata: check if port is disabled after internal command

libata core is being changed to disallow port/device disable on lower
layers.  However, some LLDDs (sata_mv) directly disable port on
command failure.  This patch makes ata_exec_internal() check whether a
port got disabled after an internal command.  If it is, AC_ERR_SYSTEM
is added to err_mask and the port gets re-enabled.

As internal command failure results in device disable for drivers
which don't implement newer reset/EH callbacks, this change results in
no behavior change for single device per port controllers.  For
slave-possible LLDDs which disable port on command failure, (1) such
drivers don't exist currently, (2) issuing command to the other device
of once-disabled port shouldn't result in catastrophe even if such
driver exists.  So, this should be enough as a temporary measure.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/scsi/libata-core.c