On Fri, Jun 2, 2023 at 3:48 AM Bart Van Assche <bvanassche@xxxxxxx> wrote: > > On 6/1/23 08:56, Kai-Heng Feng wrote: > > During system resuming process, the resuming order is from top to down. > > Namely, the ATA host is resumed before disks connected to it. > > > > When an EH is scheduled while ATA host is resumed and disk device is > > still suspended, the device_lock hold by scsi_rescan_device() is never > > released so the dpm_resume() of the disk is blocked forerver, therefore > > the system can never be resumed back. > > > > That's because scsi_attach_vpd() is expecting the disk device is in > > operational state, as it doesn't work on suspended device. > > > > To avoid such deadlock, wait until the scsi device is fully resumed, > > before continuing the rescan process. > > Why doesn't scsi_attach_vpd() support runtime power management? Calling > scsi_attach_vpd() should result in a call of sdev_runtime_resume(), It's system-wide resume in this context, so it's dpm_resume() waiting for the lock to be released by scsi_rescan_device(). Kai-Heng > isn't it? > > Thanks, > > Bart. >