Commit a7a20d1 "[SCSI] sd: limit the scope of the async probe domain" moved sd probe work out of reach of wait_for_device_probe(). Allow it to be synced via scsi_complete_async_scans(). Cc: David Miller <davem@xxxxxxxxxxxxx> Cc: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> Reported-by: Meelis Roos <mroos@xxxxxxxx> Tested-by: Meelis Roos <mroos@xxxxxxxx> Signed-off-by: Dan Williams <dan.j.williams@xxxxxxxxx> --- So this is the stop gap that allows us to keep a7a20d1 as a fix for a resume deadlock, and gives us time to figure out how to clarify async_synchronize_full() properly in the 3.6 timeframe. drivers/scsi/scsi_scan.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c index 01b0374..41f9192 100644 --- a/drivers/scsi/scsi_scan.c +++ b/drivers/scsi/scsi_scan.c @@ -141,13 +141,13 @@ struct async_scan_data { * started scanning after this function was called may or may not have * finished. */ -int scsi_complete_async_scans(void) +static void __scsi_complete_async_scans(void) { struct async_scan_data *data; do { if (list_empty(&scanning_hosts)) - return 0; + return; /* If we can't get memory immediately, that's OK. Just * sleep a little. Even if we never get memory, the async * scans will finish eventually. @@ -181,6 +181,14 @@ int scsi_complete_async_scans(void) spin_unlock(&async_scan_lock); kfree(data); +} + + +int scsi_complete_async_scans(void) +{ + __scsi_complete_async_scans(); + async_synchronize_full_domain(&scsi_sd_probe_domain); + return 0; } -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html