Commit 7a3795f2 authored by Hannes Reinecke's avatar Hannes Reinecke Committed by Martin K. Petersen

scsi: ibmvfc: Do not wait for initial device scan

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.comAcked-by: default avatarTyrel Datwyler <tyreld@linux.ibm.com>
Signed-off-by: default avatarHannes Reinecke <hare@suse.com>
Signed-off-by: default avatarMartin Wilck <mwilck@suse.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 0394b504
...@@ -3292,14 +3292,18 @@ static int ibmvfc_scan_finished(struct Scsi_Host *shost, unsigned long time) ...@@ -3292,14 +3292,18 @@ static int ibmvfc_scan_finished(struct Scsi_Host *shost, unsigned long time)
int done = 0; int done = 0;
spin_lock_irqsave(shost->host_lock, flags); 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, " dev_info(vhost->dev, "Scan taking longer than %d seconds, "
"continuing initialization\n", init_timeout); "continuing initialization\n", vhost->scan_timeout);
done = 1; done = 1;
} }
if (vhost->scan_complete) if (vhost->scan_complete) {
vhost->scan_timeout = init_timeout;
done = 1; done = 1;
}
spin_unlock_irqrestore(shost->host_lock, flags); spin_unlock_irqrestore(shost->host_lock, flags);
return done; return done;
} }
...@@ -6084,6 +6088,7 @@ static int ibmvfc_probe(struct vio_dev *vdev, const struct vio_device_id *id) ...@@ -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->client_scsi_channels = min(shost->nr_hw_queues, nr_scsi_channels);
vhost->using_channels = 0; vhost->using_channels = 0;
vhost->do_enquiry = 1; vhost->do_enquiry = 1;
vhost->scan_timeout = 0;
strcpy(vhost->partition_name, "UNKNOWN"); strcpy(vhost->partition_name, "UNKNOWN");
init_waitqueue_head(&vhost->work_wait_q); init_waitqueue_head(&vhost->work_wait_q);
......
...@@ -876,6 +876,7 @@ struct ibmvfc_host { ...@@ -876,6 +876,7 @@ struct ibmvfc_host {
int reinit; int reinit;
int delay_init; int delay_init;
int scan_complete; int scan_complete;
int scan_timeout;
int logged_in; int logged_in;
int mq_enabled; int mq_enabled;
int using_channels; int using_channels;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment