diff options
-rw-r--r-- | drivers/ata/libata-core.c | 46 | ||||
-rw-r--r-- | drivers/ata/libata-scsi.c | 2 | ||||
-rw-r--r-- | drivers/ata/libata.h | 1 |
3 files changed, 24 insertions, 25 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index a31fe96f7de6..f5917756c49d 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
@@ -5886,21 +5886,9 @@ void ata_host_init(struct ata_host *host, struct device *dev, | |||
5886 | host->ops = ops; | 5886 | host->ops = ops; |
5887 | } | 5887 | } |
5888 | 5888 | ||
5889 | 5889 | int ata_port_probe(struct ata_port *ap) | |
5890 | static void async_port_probe(void *data, async_cookie_t cookie) | ||
5891 | { | 5890 | { |
5892 | int rc; | 5891 | int rc = 0; |
5893 | struct ata_port *ap = data; | ||
5894 | |||
5895 | /* | ||
5896 | * If we're not allowed to scan this host in parallel, | ||
5897 | * we need to wait until all previous scans have completed | ||
5898 | * before going further. | ||
5899 | * Jeff Garzik says this is only within a controller, so we | ||
5900 | * don't need to wait for port 0, only for later ports. | ||
5901 | */ | ||
5902 | if (!(ap->host->flags & ATA_HOST_PARALLEL_SCAN) && ap->port_no != 0) | ||
5903 | async_synchronize_cookie(cookie); | ||
5904 | 5892 | ||
5905 | /* probe */ | 5893 | /* probe */ |
5906 | if (ap->ops->error_handler) { | 5894 | if (ap->ops->error_handler) { |
@@ -5926,23 +5914,33 @@ static void async_port_probe(void *data, async_cookie_t cookie) | |||
5926 | DPRINTK("ata%u: bus probe begin\n", ap->print_id); | 5914 | DPRINTK("ata%u: bus probe begin\n", ap->print_id); |
5927 | rc = ata_bus_probe(ap); | 5915 | rc = ata_bus_probe(ap); |
5928 | DPRINTK("ata%u: bus probe end\n", ap->print_id); | 5916 | DPRINTK("ata%u: bus probe end\n", ap->print_id); |
5929 | |||
5930 | if (rc) { | ||
5931 | /* FIXME: do something useful here? | ||
5932 | * Current libata behavior will | ||
5933 | * tear down everything when | ||
5934 | * the module is removed | ||
5935 | * or the h/w is unplugged. | ||
5936 | */ | ||
5937 | } | ||
5938 | } | 5917 | } |
5918 | return rc; | ||
5919 | } | ||
5920 | |||
5921 | |||
5922 | static void async_port_probe(void *data, async_cookie_t cookie) | ||
5923 | { | ||
5924 | struct ata_port *ap = data; | ||
5925 | |||
5926 | /* | ||
5927 | * If we're not allowed to scan this host in parallel, | ||
5928 | * we need to wait until all previous scans have completed | ||
5929 | * before going further. | ||
5930 | * Jeff Garzik says this is only within a controller, so we | ||
5931 | * don't need to wait for port 0, only for later ports. | ||
5932 | */ | ||
5933 | if (!(ap->host->flags & ATA_HOST_PARALLEL_SCAN) && ap->port_no != 0) | ||
5934 | async_synchronize_cookie(cookie); | ||
5935 | |||
5936 | (void)ata_port_probe(ap); | ||
5939 | 5937 | ||
5940 | /* in order to keep device order, we need to synchronize at this point */ | 5938 | /* in order to keep device order, we need to synchronize at this point */ |
5941 | async_synchronize_cookie(cookie); | 5939 | async_synchronize_cookie(cookie); |
5942 | 5940 | ||
5943 | ata_scsi_scan_host(ap, 1); | 5941 | ata_scsi_scan_host(ap, 1); |
5944 | |||
5945 | } | 5942 | } |
5943 | |||
5946 | /** | 5944 | /** |
5947 | * ata_host_register - register initialized ATA host | 5945 | * ata_host_register - register initialized ATA host |
5948 | * @host: ATA host to register | 5946 | * @host: ATA host to register |
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index 5defc74973d7..897066761359 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c | |||
@@ -3809,7 +3809,7 @@ int ata_sas_port_init(struct ata_port *ap) | |||
3809 | 3809 | ||
3810 | if (!rc) { | 3810 | if (!rc) { |
3811 | ap->print_id = ata_print_id++; | 3811 | ap->print_id = ata_print_id++; |
3812 | rc = ata_bus_probe(ap); | 3812 | rc = ata_port_probe(ap); |
3813 | } | 3813 | } |
3814 | 3814 | ||
3815 | return rc; | 3815 | return rc; |
diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h index a9be110dbf51..773de97988a2 100644 --- a/drivers/ata/libata.h +++ b/drivers/ata/libata.h | |||
@@ -103,6 +103,7 @@ extern int ata_task_ioctl(struct scsi_device *scsidev, void __user *arg); | |||
103 | extern int ata_cmd_ioctl(struct scsi_device *scsidev, void __user *arg); | 103 | extern int ata_cmd_ioctl(struct scsi_device *scsidev, void __user *arg); |
104 | extern struct ata_port *ata_port_alloc(struct ata_host *host); | 104 | extern struct ata_port *ata_port_alloc(struct ata_host *host); |
105 | extern const char *sata_spd_string(unsigned int spd); | 105 | extern const char *sata_spd_string(unsigned int spd); |
106 | extern int ata_port_probe(struct ata_port *ap); | ||
106 | 107 | ||
107 | /* libata-acpi.c */ | 108 | /* libata-acpi.c */ |
108 | #ifdef CONFIG_ATA_ACPI | 109 | #ifdef CONFIG_ATA_ACPI |