diff options
author | Tejun Heo <htejun@gmail.com> | 2007-06-25 21:47:11 +0900 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-06-27 02:44:21 -0400 |
commit | 914616a3c2a54504f3b0eda0b67fcd32226b3e83 (patch) | |
tree | 25ed41a36178fbaba64745269e9fbe5bac4eecf0 /drivers/ata | |
parent | 09d7f9b0658072485a93247e1b6e15e661f860d2 (diff) | |
download | op-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>
Diffstat (limited to 'drivers/ata')
-rw-r--r-- | drivers/ata/libata-eh.c | 1 |
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 */ |