Hmmm... something is setting EH_PENDING while EH is in progress.
Let's see what's doing it. Can you please apply the following patch
on top of the previous one and report the kernel log?
Thanks.
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index 5e59050..8f0d854 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -896,6 +896,10 @@ static void ata_eh_set_pending(struct ata_port *ap, int fastdrain)
ap->pflags |= ATA_PFLAG_EH_PENDING;
+ ata_port_printk(ap, KERN_WARNING, "XXX SET EH PENDING, fastdrain=%d\n",
+ fastdrain);
+ dump_stack();
+
if (!fastdrain)
return;
--