Re: [PATCH v3] scsi: core: pair EH runtime PM get and put

From: Peter Wang (王信友)

Date: Mon Aug 03 2026 - 03:42:42 EST


On Wed, 2026-07-29 at 19:16 +0800, Hongjie Fang wrote
> shost->eh_noresume is currently consulted twice in one error handling
> iteration: once before scsi_autopm_get_host() and once again before
> scsi_autopm_put_host().
>
> That is racy when a PM-triggered error path flips shost->eh_noresume
> while
> the SCSI EH thread is still running.
>
> The problem flow looks like this:
> PM path
>   ufshcd_set_dev_pwr_mode()
>     shost->eh_noresume = 1
>     ufshcd_execute_start_stop  <-- trigger EH
>     ...
>     shost->eh_noresume = 0
>
> EH path
>   scsi_error_handler()
>     if (!shost->eh_noresume)
>       scsi_autopm_get_host()  <-- skipped
>     ...
>     if (!shost->eh_noresume)
>        scsi_autopm_put_host()  <-- executed later
>
> In that case one EH iteration can skip autoresume on entry and still
> drop
> a runtime PM reference on exit. That leaves an unmatched runtime PM
> put
> and can trigger a runtime PM usage count underflow.
>
> Fix this by making eh_noresume a regular bool so it can be accessed
> with
> READ_ONCE() and WRITE_ONCE(). Snapshot it once per EH iteration and
> use
> that snapshot for both runtime PM get and put decisions.
>
> Fixes: ae0751ffc77e ("[SCSI] add flag to skip the runtime PM calls on
> the host")
> Signed-off-by: Hongjie Fang <hongjiefang@xxxxxxxxxxxx>
> ---

Reviewed-by: Peter Wang <peter.wang@xxxxxxxxxxxx>