On 2020-06-29 09:15, Alan Stern wrote: > Aha. Looking at this more closely, it's apparent that the code in > blk-core.c contains a logic bug: It assumes that if the BLK_MQ_REQ_PREEMPT > flag is set then the request can be issued regardless of the queue's > runtime status. That is not correct when the queue is suspended. Are you sure of this? In the past (legacy block layer) no requests were processed for queues in state RPM_SUSPENDED. However, that function and its successor blk_pm_allow_request() are gone. The following code was removed by commit 7cedffec8e75 ("block: Make blk_get_request() block for non-PM requests while suspended"). static struct request *blk_pm_peek_request(struct request_queue *q, struct request *rq) { if (q->dev && (q->rpm_status == RPM_SUSPENDED || (q->rpm_status != RPM_ACTIVE && !(rq->cmd_flags & REQ_PM)))) return NULL; else return rq; } Bart.