|
@@ -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)) {
|