aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2007-07-16 01:29:41 -0400
committerJeff Garzik <jeff@garzik.org>2007-07-20 08:26:26 -0400
commit4e57c517b3cbaceb7438eeec879ca129fc17442c (patch)
treec77ee2e10ff0b9d83d454937e5890c38314cbabf /drivers/ata
parentfccb6ea5c240b9f29baa55448488fd6aee49f5a5 (diff)
libata: schedule probing after SError access failure during autopsy
If SError isn't accessible, EH can't tell whether hotplug has happened or not. Report SError read failure with AC_ERR_OTHER and schedule probing with hardreset. This will be mainly useful for PMPs. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/ata')
-rw-r--r--drivers/ata/libata-eh.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index a5a8f8453061..e7e2ba24ce66 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -1478,8 +1478,12 @@ static void ata_eh_autopsy(struct ata_port *ap)
1478 if (rc == 0) { 1478 if (rc == 0) {
1479 ehc->i.serror |= serror; 1479 ehc->i.serror |= serror;
1480 ata_eh_analyze_serror(ap); 1480 ata_eh_analyze_serror(ap);
1481 } else if (rc != -EOPNOTSUPP) 1481 } else if (rc != -EOPNOTSUPP) {
1482 /* SError read failed, force hardreset and probing */
1483 ata_ehi_schedule_probe(&ehc->i);
1482 ehc->i.action |= ATA_EH_HARDRESET; 1484 ehc->i.action |= ATA_EH_HARDRESET;
1485 ehc->i.err_mask |= AC_ERR_OTHER;
1486 }
1483 1487
1484 /* analyze NCQ failure */ 1488 /* analyze NCQ failure */
1485 ata_eh_analyze_ncq_error(ap); 1489 ata_eh_analyze_ncq_error(ap);