diff options
author | Tejun Heo <htejun@gmail.com> | 2007-07-16 07:29:41 +0200 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-07-20 14:26:26 +0200 |
commit | 4e57c517b3cbaceb7438eeec879ca129fc17442c (patch) | |
tree | c77ee2e10ff0b9d83d454937e5890c38314cbabf /drivers/ata | |
parent | libata: clear HOTPLUG flag after a reset (diff) | |
download | linux-4e57c517b3cbaceb7438eeec879ca129fc17442c.tar.xz linux-4e57c517b3cbaceb7438eeec879ca129fc17442c.zip |
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.c | 6 |
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) if (rc == 0) { ehc->i.serror |= serror; ata_eh_analyze_serror(ap); - } else if (rc != -EOPNOTSUPP) + } else if (rc != -EOPNOTSUPP) { + /* SError read failed, force hardreset and probing */ + ata_ehi_schedule_probe(&ehc->i); ehc->i.action |= ATA_EH_HARDRESET; + ehc->i.err_mask |= AC_ERR_OTHER; + } /* analyze NCQ failure */ ata_eh_analyze_ncq_error(ap); |