RE: [PATCH v1 1/1] ufs: core: set SDEV_OFFLINE when ufs shutdown.

Seunghwan Baek
2024-09-25T06:55:03Z

> 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.