Messages in this thread Patch in this message | | | Date | Sat, 10 Jun 2023 08:03:59 -0700 | Subject | Re: Fwd: Waking up from resume locks up on sr device | From | Bart Van Assche <> |
| |
On 6/10/23 06:27, Bagas Sanjaya wrote: > On 6/10/23 15:55, Pavel Machek wrote: >>>> #regzbot introduced: v5.0..v6.4-rc5 https://bugzilla.kernel.org/show_bug.cgi?id=217530 >>>> #regzbot title: Waking up from resume locks up on SCSI CD/DVD drive >>>> >>> The reporter had found the culprit (via bisection), so: >>> >>> #regzbot introduced: a19a93e4c6a98c >> Maybe cc the authors of that commit? > > Ah! I forgot to do that! Thanks anyway.
Hi Damien,
Why does the ATA code call scsi_rescan_device() before system resume has finished? Would ATA devices still work with the patch below applied?
Thanks,
Bart.
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c index 6a959c993dd8..be3971b7fd27 100644 --- a/drivers/scsi/scsi_scan.c +++ b/drivers/scsi/scsi_scan.c @@ -1629,6 +1629,20 @@ void scsi_rescan_device(struct device *dev) { struct scsi_device *sdev = to_scsi_device(dev);
+#ifdef CONFIG_PM_SLEEP + /* + * The ATA subsystem may call scsi_rescan_device() before resuming has + * finished. If this happens, prevent a deadlock on the device_lock() + * call by skipping rescanning. + */ + if (dev->power.is_suspended) + return; +#endif + + /* + * Serialize scsi_driver.rescan() calls and scsi_driver.gendrv.remove() + * calls. + */ device_lock(dev);
scsi_attach_vpd(sdev);
| |