Skip to contentSkip to conversation

scsi: wait sd probing in manual scan

RFC PATCH In review Peng Tao 2 participants 2 messages Apr 28, 2017 – May 3, 2017 SCSI

lore
Share & tools
lore

Peng Tao

author
#0 lore raw

RFC PATCH 1/1 scsi: wait sd probing in manual scan

We have a guest init programe trying to mount a device after doing scsi host scan at boot time. Occasionally it fails to find the device when mounting. After digging a bit, it seems the root cause is sd async_schedule probing.

With async probing, there is no guarantee of device readiness when scsi host scan finishes. However, users do expect to have a valid way to make sure device is usable. Change scsi scan to wait sd probing in manual scan case so that we don't leave user with random device state when scsi host scan returns.

Is this the right way to have such guarantee?

CC "James E.J. Bottomley" <[email protected]>
CC "Martin K. Petersen" <[email protected]>
---
 drivers/scsi/scsi_scan.c | 11 +++++++++++
 1 file changed, 11 insertions(+)
drivers/scsi/scsi_scan.c +11 -0
index 6f7128f..0208f40 100644
@@ -1077,6 +1077,11 @@ static int scsi_probe_and_add_lun(struct scsi_target *starget,
 			SCSI_LOG_SCAN_BUS(3, sdev_printk(KERN_INFO, sdev,
 				"scsi scan: device exists on %s\n",
 				dev_name(&sdev->sdev_gendev)));
+			/* sd probing uses async_schedule.  Wait until it finishes if this
+			 * is a user requested rescan.
+			 */
+			if (rescan == SCSI_SCAN_MANUAL && scsi_is_sdev_device(&sdev->sdev_gendev))
+				async_synchronize_full_domain(&scsi_sd_probe_domain);
 			if (sdevp)
 				*sdevp = sdev;
 			else
@@ -1176,6 +1181,12 @@ static int scsi_probe_and_add_lun(struct scsi_target *starget,
 		}
 	}
 
+	/* sd probing uses async_schedule.  Wait until it finishes if this
+	 * is a user requested rescan.
+	 */
+	if (rescan == SCSI_SCAN_MANUAL && scsi_is_sdev_device(&sdev->sdev_gendev))
+		async_synchronize_full_domain(&scsi_sd_probe_domain);
+
  out_free_result:
 	kfree(result);
  out_free_sdev:
Signature · 1 line
2.7.4
#1 lore raw
Quoted 10 lines · Peng Tao

We have a guest init programe trying to mount a device after doing scsi host scan at boot time. Occasionally it fails to find the device when mounting. After digging a bit, it seems the root cause is sd async_schedule probing.

With async probing, there is no guarantee of device readiness when scsi host scan finishes. However, users do expect to have a valid way to make sure device is usable. Change scsi scan to wait sd probing in manual scan case so that we don't leave user with random device state when scsi host scan returns.

Is this the right way to have such guarantee?

Hello Peng,

Please fix the guest init program such that it waits until the SCSI device it needs is ready.

Thanks,

Bart.