提交 a20f33ff 编写于 作者: T Tejun Heo 提交者: Jeff Garzik

[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: NTejun Heo <htejun@gmail.com>
Signed-off-by: NJeff Garzik <jeff@garzik.org>
上级 eec4c3f3
......@@ -1169,9 +1169,6 @@ static void ata_eh_autopsy(struct ata_port *ap)
/* inherit upper level err_mask */
qc->err_mask |= ehc->i.err_mask;
if (qc->err_mask & AC_ERR_TIMEOUT)
action |= ATA_EH_SOFTRESET;
/* analyze TF */
action |= ata_eh_analyze_tf(qc, &qc->result_tf);
......@@ -1201,9 +1198,14 @@ static void ata_eh_autopsy(struct ata_port *ap)
if (failed_dev)
action |= ata_eh_speed_down(failed_dev, is_io, all_err_mask);
if (all_err_mask)
/* enforce default EH actions */
if (ap->flags & ATA_FLAG_FROZEN ||
all_err_mask & (AC_ERR_HSM | AC_ERR_TIMEOUT))
action |= ATA_EH_SOFTRESET;
else if (all_err_mask)
action |= ATA_EH_REVALIDATE;
/* record autopsy result */
ehc->i.dev = failed_dev;
ehc->i.action = action;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册