scsi: ibmvfc: Do not wait for initial device scan
authorHannes Reinecke <hare@suse.com>
Tue, 17 Aug 2021 07:53:06 +0000 (09:53 +0200)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 18 Aug 2021 02:28:40 +0000 (22:28 -0400)
The initial device scan might take some time, and there really is no need
to wait for it during probe().  So return immediately from scsi_scan_host()
during probe() and avoid any udev stalls during booting.

Link: https://lore.kernel.org/r/20210817075306.11315-1-mwilck@suse.com
Acked-by: Tyrel Datwyler <tyreld@linux.ibm.com>
Signed-off-by: Hannes Reinecke <hare@suse.com>
Signed-off-by: Martin Wilck <mwilck@suse.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/ibmvscsi/ibmvfc.c
drivers/scsi/ibmvscsi/ibmvfc.h

index ba7150c..1f1586a 100644 (file)
@@ -3292,14 +3292,18 @@ static int ibmvfc_scan_finished(struct Scsi_Host *shost, unsigned long time)
        int done = 0;
 
        spin_lock_irqsave(shost->host_lock, flags);
-       if (time >= (init_timeout * HZ)) {
+       if (!vhost->scan_timeout)
+               done = 1;
+       else if (time >= (vhost->scan_timeout * HZ)) {
                dev_info(vhost->dev, "Scan taking longer than %d seconds, "
-                        "continuing initialization\n", init_timeout);
+                        "continuing initialization\n", vhost->scan_timeout);
                done = 1;
        }
 
-       if (vhost->scan_complete)
+       if (vhost->scan_complete) {
+               vhost->scan_timeout = init_timeout;
                done = 1;
+       }
        spin_unlock_irqrestore(shost->host_lock, flags);
        return done;
 }
@@ -6084,6 +6088,7 @@ static int ibmvfc_probe(struct vio_dev *vdev, const struct vio_device_id *id)
        vhost->client_scsi_channels = min(shost->nr_hw_queues, nr_scsi_channels);
        vhost->using_channels = 0;
        vhost->do_enquiry = 1;
+       vhost->scan_timeout = 0;
 
        strcpy(vhost->partition_name, "UNKNOWN");
        init_waitqueue_head(&vhost->work_wait_q);
index 92fb889..3718406 100644 (file)
@@ -876,6 +876,7 @@ struct ibmvfc_host {
        int reinit;
        int delay_init;
        int scan_complete;
+       int scan_timeout;
        int logged_in;
        int mq_enabled;
        int using_channels;