mirror of https://gitee.com/openkylin/linux.git
[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: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
4b10e55927
commit
2044470ccc
|
@ -1344,32 +1344,30 @@ static int ata_bus_probe(struct ata_port *ap)
|
|||
|
||||
ata_port_probe(ap);
|
||||
|
||||
/* reset */
|
||||
if (ap->ops->probe_reset) {
|
||||
for (i = 0; i < ATA_MAX_DEVICES; i++)
|
||||
classes[i] = ATA_DEV_UNKNOWN;
|
||||
/* 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))
|
||||
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];
|
||||
|
|
Loading…
Reference in New Issue