aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/libata-eh.c
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2006-05-15 23:58:24 -0400
committerJeff Garzik <jeff@garzik.org>2006-05-20 00:39:08 -0400
commita20f33ffde8ba5fb27666aa1e228a45b7e3b8dcb (patch)
tree850a2717f3861470a0020272f98416e17d36e5bf /drivers/scsi/libata-eh.c
parenteec4c3f317991dc85c786ffccd9c1a8620c41b18 (diff)
[PATCH] libata: enforce default EH actions
LLDDs rely on libata that certain EH actions are automatically taken on some errors. If the port is frozen or one or more qc's have failed with HSM violation or timeout, softreset is enforced (LLDD can ask for storonger EH action at will). If any other error condition exists, libata EH always revalidates. This behavior existed in earlier revisions of new EH but lost during development process. This patch restores it. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/scsi/libata-eh.c')
-rw-r--r--drivers/scsi/libata-eh.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/scsi/libata-eh.c b/drivers/scsi/libata-eh.c
index 7244caff13a0..750e734d1c09 100644
--- a/drivers/scsi/libata-eh.c
+++ b/drivers/scsi/libata-eh.c
@@ -1169,9 +1169,6 @@ static void ata_eh_autopsy(struct ata_port *ap)
1169 /* inherit upper level err_mask */ 1169 /* inherit upper level err_mask */
1170 qc->err_mask |= ehc->i.err_mask; 1170 qc->err_mask |= ehc->i.err_mask;
1171 1171
1172 if (qc->err_mask & AC_ERR_TIMEOUT)
1173 action |= ATA_EH_SOFTRESET;
1174
1175 /* analyze TF */ 1172 /* analyze TF */
1176 action |= ata_eh_analyze_tf(qc, &qc->result_tf); 1173 action |= ata_eh_analyze_tf(qc, &qc->result_tf);
1177 1174
@@ -1201,9 +1198,14 @@ static void ata_eh_autopsy(struct ata_port *ap)
1201 if (failed_dev) 1198 if (failed_dev)
1202 action |= ata_eh_speed_down(failed_dev, is_io, all_err_mask); 1199 action |= ata_eh_speed_down(failed_dev, is_io, all_err_mask);
1203 1200
1204 if (all_err_mask) 1201 /* enforce default EH actions */
1202 if (ap->flags & ATA_FLAG_FROZEN ||
1203 all_err_mask & (AC_ERR_HSM | AC_ERR_TIMEOUT))
1204 action |= ATA_EH_SOFTRESET;
1205 else if (all_err_mask)
1205 action |= ATA_EH_REVALIDATE; 1206 action |= ATA_EH_REVALIDATE;
1206 1207
1208 /* record autopsy result */
1207 ehc->i.dev = failed_dev; 1209 ehc->i.dev = failed_dev;
1208 ehc->i.action = action; 1210 ehc->i.action = action;
1209 1211