Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 45694c28 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev:
  libata: fix unexpectedly frozen port after ata_eh_reset()
parents 7f45e5cd 8c56cacc
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -2802,10 +2802,11 @@ int ata_eh_reset(struct ata_link *link, int classify,
	}

	/*
	 * Some controllers can't be frozen very well and may set
	 * spuruious error conditions during reset.  Clear accumulated
	 * error information.  As reset is the final recovery action,
	 * nothing is lost by doing this.
	 * Some controllers can't be frozen very well and may set spurious
	 * error conditions during reset.  Clear accumulated error
	 * information and re-thaw the port if frozen.  As reset is the
	 * final recovery action and we cross check link onlineness against
	 * device classification later, no hotplug event is lost by this.
	 */
	spin_lock_irqsave(link->ap->lock, flags);
	memset(&link->eh_info, 0, sizeof(link->eh_info));
@@ -2814,6 +2815,9 @@ int ata_eh_reset(struct ata_link *link, int classify,
	ap->pflags &= ~ATA_PFLAG_EH_PENDING;
	spin_unlock_irqrestore(link->ap->lock, flags);

	if (ap->pflags & ATA_PFLAG_FROZEN)
		ata_eh_thaw_port(ap);

	/*
	 * Make sure onlineness and classification result correspond.
	 * Hotplug could have happened during reset and some