Skip to content

Commit

Permalink
[libata] improve device scan
Browse files Browse the repository at this point in the history
Replace SCSI's legacy "bang at the door" method of probing with one
directly controlled by the underlying ATA transport layer.

We now only call scsi_scan_target() for devices we find, rather than
probing every possible channel/id within a certain range.
  • Loading branch information
Jeff Garzik committed Oct 3, 2005
1 parent 87e807b commit 644dd0c
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 1 deletion.
2 changes: 1 addition & 1 deletion drivers/scsi/libata-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -4113,7 +4113,7 @@ int ata_device_add(struct ata_probe_ent *ent)
for (i = 0; i < count; i++) {
struct ata_port *ap = host_set->ports[i];

scsi_scan_host(ap->host);
ata_scsi_scan_host(ap);
}

dev_set_drvdata(dev, host_set);
Expand Down
12 changes: 12 additions & 0 deletions drivers/scsi/libata-scsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1678,3 +1678,15 @@ void ata_scsi_simulate(u16 *id,
}
}

void ata_scsi_scan_host(struct ata_port *ap)
{
unsigned int i;

if (ap->flags & ATA_FLAG_PORT_DISABLED)
return;

for (i = 0; i < ATA_MAX_DEVICES; i++)
if (ata_dev_present(&ap->device[i]))
scsi_scan_target(&ap->host->shost_gendev, 0, i, ~0, 0);
}

1 change: 1 addition & 0 deletions drivers/scsi/libata.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ extern void swap_buf_le16(u16 *buf, unsigned int buf_words);


/* libata-scsi.c */
extern void ata_scsi_scan_host(struct ata_port *ap);
extern void ata_to_sense_error(struct ata_queued_cmd *qc, u8 drv_stat);
extern int ata_scsi_error(struct Scsi_Host *host);
extern unsigned int ata_scsiop_inq_std(struct ata_scsi_args *args, u8 *rbuf,
Expand Down

0 comments on commit 644dd0c

Please sign in to comment.