Re: [PATCH v2 9/9] block: Do not accept any requests while suspended

Stanley Chu
2020-11-18T09:05:12Z

On Mon, 2020-11-16 at 11:04 +0800, Bart Van Assche wrote:
> From: Alan Stern <stern@rowland.harvard.edu>
>
> blk_queue_enter() accepts BLK_MQ_REQ_PREEMPT independent of the runtime
> power management state. Since SCSI domain validation no longer depends on
> this behavior, modify the behavior of blk_queue_enter() as follows:
> - Do not accept any requests while suspended.
> - Only process power management requests while suspending or resuming.
>
> Submitting BLK_MQ_REQ_PREEMPT requests to a device that is runtime-
> suspended causes runtime-suspended block devices not to resume as they
> should. The request which should cause a runtime resume instead gets
> issued directly, without resuming the device first. Of course the device
> can't handle it properly, the I/O fails, and the device remains suspended.
>
> The problem is fixed by checking that the queue's runtime-PM status
> isn't RPM_SUSPENDED before allowing a request to be issued, and
> queuing a runtime-resume request if it is. In particular, the inline
> blk_pm_request_resume() routine is renamed blk_pm_resume_queue() and
> the code is unified by merging the surrounding checks into the
> routine. If the queue isn't set up for runtime PM, or there currently
> is no restriction on allowed requests, the request is allowed.
> Likewise if the BLK_MQ_REQ_PREEMPT flag is set and the status isn't
> RPM_SUSPENDED. Otherwise a runtime resume is queued and the request
> is blocked until conditions are more suitable.
>
> Cc: Can Guo <cang@codeaurora.org>
> Cc: Stanley Chu <stanley.chu@mediatek.com>
> Cc: Ming Lei <ming.lei@redhat.com>
> Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> Reported-and-tested-by: Martin Kepplinger <martin.kepplinger@puri.sm>
> Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
> Signed-off-by: Bart Van Assche <bvanassche@acm.org>

Reviewed-by: Stanley Chu <stanley.chu@mediatek.com>