summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2007-06-25 21:47:11 +0900
committerJeff Garzik <jeff@garzik.org>2007-06-27 02:44:21 -0400
commit914616a3c2a54504f3b0eda0b67fcd32226b3e83 (patch)
tree25ed41a36178fbaba64745269e9fbe5bac4eecf0
parent09d7f9b0658072485a93247e1b6e15e661f860d2 (diff)
downloadop-kernel-dev-914616a3c2a54504f3b0eda0b67fcd32226b3e83.zip
op-kernel-dev-914616a3c2a54504f3b0eda0b67fcd32226b3e83.tar.gz
libata: fix infinite EH waiting bug
When EH gives up after repeated exceptions, it doesn't't clear the PENDING bit on exit which leaves PENDING bit set without EH actually scheduled. This makes ata_port_wait_eh() to wait forever makes rmmod hang on such port. Fix it by clearing the flag. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
-rw-r--r--drivers/ata/libata-eh.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index 45f81ad..f7582c9 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -336,6 +336,7 @@ void ata_scsi_error(struct Scsi_Host *host)
}
ata_port_printk(ap, KERN_ERR, "EH pending after %d "
"tries, giving up\n", ATA_EH_MAX_REPEAT);
+ ap->pflags &= ~ATA_PFLAG_EH_PENDING;
}
/* this run is complete, make sure EH info is clear */
OpenPOWER on IntegriCloud