> On 9/23/24 7:17 PM, Seunghwan Baek wrote:> That's because SSU (Start Stop > Unit) command must be sent during > > shutdown process. If SDEV_OFFLINE is set for wlun, SSU command cannot > > be sent because it is rejected by the scsi layer. Therefore, we > > consider to set SDEV_QUIESCE for wlun, and set SDEV_OFFLINE for other > > lus. > Right. Since ufshcd_wl_shutdown() is expected to stop all DMA related to > the UFS host, shouldn't there be a scsi_device_quiesce(sdev) call after > the __ufshcd_wl_suspend(hba, UFS_SHUTDOWN_PM) call? > > Thanks, > > Bart. Yes. __ufshcd_wl_suspend(hba, UFS_SHUTDOWN_PM) should be called after scsi_device_quiesce(sdev). Generally, the SSU command is the last command before UFS power off. Therefore, if __ufshcd_wl_suspend is performed before scsi_device_quiesce, other commands may be performed after the SSU command and UFS may not guarantee the operation of the SSU command, which may cause other problems. This order must be guaranteed. And with SDEV_QUIESCE, deadlock issue cannot be avoided due to requeue. We need to return the i/o error with SDEV_OFFLINE to avoid the mentioned deadlock problem.