]> Pileus Git - ~andy/linux/blobdiff - drivers/ata/libata-eh.c
Merge branch 'next/board' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/linux...
[~andy/linux] / drivers / ata / libata-eh.c
index 16fa45755c18eee4b1e515d1475901c09ff0bf06..ed16fbedaabd78020044996a70f4f4ad1d8879c8 100644 (file)
@@ -2883,8 +2883,17 @@ int ata_eh_reset(struct ata_link *link, int classify,
            sata_scr_read(link, SCR_STATUS, &sstatus))
                rc = -ERESTART;
 
-       if (rc == -ERESTART || try >= max_tries)
+       if (rc == -ERESTART || try >= max_tries) {
+               /*
+                * Thaw host port even if reset failed, so that the port
+                * can be retried on the next phy event.  This risks
+                * repeated EH runs but seems to be a better tradeoff than
+                * shutting down a port after a botched hotplug attempt.
+                */
+               if (ata_is_host_link(link))
+                       ata_eh_thaw_port(ap);
                goto out;
+       }
 
        now = jiffies;
        if (time_before(now, deadline)) {