--- /dev/null
+From a568d1d2e2aff4f114b087c06bfd350e945ad6cf Mon Sep 17 00:00:00 2001
+From: Tejun Heo <tj@kernel.org>
+Date: Tue, 21 Oct 2008 20:37:21 +0900
+Subject: [PATCH] libata-eh: fix slave link EH action mask handling
+References: bnc#441420
+
+Slave link action mask is transferred to master link and all the EH
+actions are taken by the master link. ata_eh_about_to_do() and
+ata_eh_done() are called with ATA_EH_ALL_ACTIONS to clear the slave
+link actions during transfer. This always sets ATA_PFLAG_RECOVERED
+flag causing spurious "EH complete" messages.
+
+Don't set ATA_PFLAG_RECOVERED for slave link actions.
+
+Signed-off-by: Tejun Heo <tj@kernel.org>
+Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
+Signed-off-by: Tejun Heo <teheo@suse.de>
+---
+ drivers/ata/libata-eh.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/drivers/ata/libata-eh.c
++++ b/drivers/ata/libata-eh.c
+@@ -1200,7 +1200,10 @@ void ata_eh_about_to_do(struct ata_link
+
+ ata_eh_clear_action(link, dev, ehi, action);
+
+- if (!(ehc->i.flags & ATA_EHI_QUIET))
++ /* About to take EH action, set RECOVERED. Ignore actions on
++ * slave links as master will do them again.
++ */
++ if (!(ehc->i.flags & ATA_EHI_QUIET) && link != ap->slave_link)
+ ap->pflags |= ATA_PFLAG_RECOVERED;
+
+ spin_unlock_irqrestore(ap->lock, flags);