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

Commit 2044470c authored by Tejun Heo's avatar Tejun Heo Committed by Jeff Garzik
Browse files

[PATCH] libata: fix class handling in ata_bus_probe()



ata_bus_probe() didn't set classes[] properly for port disabled case
of ->phy_reset() compatibility path.  This patch moves classes[]
initialization and normalization out of ->probe_reset block such that
it applies to both ->probe_reset and ->phy_reset paths.

Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 4b10e559
Loading
Loading
Loading
Loading
+11 −13
Original line number Diff line number Diff line
@@ -1344,32 +1344,30 @@ static int ata_bus_probe(struct ata_port *ap)

	ata_port_probe(ap);

	/* reset */
	if (ap->ops->probe_reset) {
	/* reset and determine device classes */
	for (i = 0; i < ATA_MAX_DEVICES; i++)
		classes[i] = ATA_DEV_UNKNOWN;

	if (ap->ops->probe_reset) {
		rc = ap->ops->probe_reset(ap, classes);
		if (rc) {
			printk("ata%u: reset failed (errno=%d)\n", ap->id, rc);
			return rc;
		}

		for (i = 0; i < ATA_MAX_DEVICES; i++)
			if (classes[i] == ATA_DEV_UNKNOWN)
				classes[i] = ATA_DEV_NONE;
	} else {
		ap->ops->phy_reset(ap);

		for (i = 0; i < ATA_MAX_DEVICES; i++) {
		if (!(ap->flags & ATA_FLAG_PORT_DISABLED))
			for (i = 0; i < ATA_MAX_DEVICES; i++)
				classes[i] = ap->device[i].class;
			else
				ap->device[i].class = ATA_DEV_UNKNOWN;
		}

		ata_port_probe(ap);
	}

	for (i = 0; i < ATA_MAX_DEVICES; i++)
		if (classes[i] == ATA_DEV_UNKNOWN)
			classes[i] = ATA_DEV_NONE;

	/* read IDENTIFY page and configure devices */
	for (i = 0; i < ATA_MAX_DEVICES; i++) {
		struct ata_device *dev = &ap->device[i];