aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/libata-scsi.c
diff options
context:
space:
mode:
authorJeff Garzik <jgarzik@pobox.com>2005-10-03 21:36:41 -0400
committerJeff Garzik <jgarzik@pobox.com>2005-10-03 21:36:41 -0400
commit3f19ee8cb3a1003cb5183696bc55934f5865f868 (patch)
tree106eda632143805fcc4fccef4d601c4d5d579bd7 /drivers/scsi/libata-scsi.c
parent644dd0cc494702ecd0698f467de113ace9593888 (diff)
[libata] improve device scan even more
Since our max_lun is unconditionally set to 1, we might as well hardcode a LUN 0 probe, rather than a wildcard LUN scan. The ide-scsi driver sets max_lun to a value greater than under certain conditions: if ((drive->id->last_lun & 0x7) != 7) host->max_lun = (drive->id->last_lun & 0x7) + 1; else host->max_lun = 1; last_lun is Word 126 of IDENTIFY PACKET DEVICE, marked as obsolete and undocumented in non-ancient specs. We'll leave it out for now. Should the need arise to support multi-LUN ATAPI devices, we'll probably want to add the above code. Finally, there have been reports of REPORT LUNS commands locking up ATAPI drives. Eliminating the wildcard LUN scan could help reduce the trouble from problematic drives.
Diffstat (limited to 'drivers/scsi/libata-scsi.c')
-rw-r--r--drivers/scsi/libata-scsi.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/scsi/libata-scsi.c b/drivers/scsi/libata-scsi.c
index 4fc0134d4272..8295a656e521 100644
--- a/drivers/scsi/libata-scsi.c
+++ b/drivers/scsi/libata-scsi.c
@@ -1680,13 +1680,17 @@ void ata_scsi_simulate(u16 *id,
1680 1680
1681void ata_scsi_scan_host(struct ata_port *ap) 1681void ata_scsi_scan_host(struct ata_port *ap)
1682{ 1682{
1683 struct ata_device *dev;
1683 unsigned int i; 1684 unsigned int i;
1684 1685
1685 if (ap->flags & ATA_FLAG_PORT_DISABLED) 1686 if (ap->flags & ATA_FLAG_PORT_DISABLED)
1686 return; 1687 return;
1687 1688
1688 for (i = 0; i < ATA_MAX_DEVICES; i++) 1689 for (i = 0; i < ATA_MAX_DEVICES; i++) {
1689 if (ata_dev_present(&ap->device[i])) 1690 dev = &ap->device[i];
1690 scsi_scan_target(&ap->host->shost_gendev, 0, i, ~0, 0); 1691
1692 if (ata_dev_present(dev))
1693 scsi_scan_target(&ap->host->shost_gendev, 0, i, 0, 0);
1694 }
1691} 1695}
1692 1696