aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/libata-core.c
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2006-03-12 11:57:01 -0500
committerJeff Garzik <jeff@garzik.org>2006-03-12 12:49:45 -0500
commit2044470cccec1bfe6bb819027975df302ff43bf8 (patch)
tree64254b2ca55f8727f08e46361532361027cf4faf /drivers/scsi/libata-core.c
parent4b10e559277de490bf5c257a1e3264a2bf51404b (diff)
[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>
Diffstat (limited to 'drivers/scsi/libata-core.c')
-rw-r--r--drivers/scsi/libata-core.c24
1 files changed, 11 insertions, 13 deletions
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
index 42d43b55fb8..c17df3f22fd 100644
--- a/drivers/scsi/libata-core.c
+++ b/drivers/scsi/libata-core.c
@@ -1344,32 +1344,30 @@ static int ata_bus_probe(struct ata_port *ap)
1344 1344
1345 ata_port_probe(ap); 1345 ata_port_probe(ap);
1346 1346
1347 /* reset */ 1347 /* reset and determine device classes */
1348 if (ap->ops->probe_reset) { 1348 for (i = 0; i < ATA_MAX_DEVICES; i++)
1349 for (i = 0; i < ATA_MAX_DEVICES; i++) 1349 classes[i] = ATA_DEV_UNKNOWN;
1350 classes[i] = ATA_DEV_UNKNOWN;
1351 1350
1351 if (ap->ops->probe_reset) {
1352 rc = ap->ops->probe_reset(ap, classes); 1352 rc = ap->ops->probe_reset(ap, classes);
1353 if (rc) { 1353 if (rc) {
1354 printk("ata%u: reset failed (errno=%d)\n", ap->id, rc); 1354 printk("ata%u: reset failed (errno=%d)\n", ap->id, rc);
1355 return rc; 1355 return rc;
1356 } 1356 }
1357
1358 for (i = 0; i < ATA_MAX_DEVICES; i++)
1359 if (classes[i] == ATA_DEV_UNKNOWN)
1360 classes[i] = ATA_DEV_NONE;
1361 } else { 1357 } else {
1362 ap->ops->phy_reset(ap); 1358 ap->ops->phy_reset(ap);
1363 1359
1364 for (i = 0; i < ATA_MAX_DEVICES; i++) { 1360 if (!(ap->flags & ATA_FLAG_PORT_DISABLED))
1365 if (!(ap->flags & ATA_FLAG_PORT_DISABLED)) 1361 for (i = 0; i < ATA_MAX_DEVICES; i++)
1366 classes[i] = ap->device[i].class; 1362 classes[i] = ap->device[i].class;
1367 else 1363
1368 ap->device[i].class = ATA_DEV_UNKNOWN;
1369 }
1370 ata_port_probe(ap); 1364 ata_port_probe(ap);
1371 } 1365 }
1372 1366
1367 for (i = 0; i < ATA_MAX_DEVICES; i++)
1368 if (classes[i] == ATA_DEV_UNKNOWN)
1369 classes[i] = ATA_DEV_NONE;
1370
1373 /* read IDENTIFY page and configure devices */ 1371 /* read IDENTIFY page and configure devices */
1374 for (i = 0; i < ATA_MAX_DEVICES; i++) { 1372 for (i = 0; i < ATA_MAX_DEVICES; i++) {
1375 struct ata_device *dev = &ap->device[i]; 1373 struct ata_device *dev = &ap->device[i];