Re: [PATCH 1/2] PM: runtime: Fix I/O hang due to race between resume and runtime disable
From: Bart Van Assche
Date: Mon Dec 01 2025 - 11:41:29 EST
On 11/27/25 3:29 AM, YangYang wrote:
diff --git a/block/blk-core.c b/block/blk-core.c
index 66fb2071d..041d29ba4 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -323,12 +323,15 @@ int blk_queue_enter(struct request_queue *q, blk_mq_req_flags_t flags)
* reordered.
*/
smp_rmb();
- wait_event(q->mq_freeze_wq,
- (!q->mq_freeze_depth &&
- blk_pm_resume_queue(pm, q)) ||
- blk_queue_dying(q));
+check:
+ wait_event(q->mq_freeze_wq, !q->mq_freeze_depth);
+
if (blk_queue_dying(q))
return -ENODEV;
This can't work. blk_mq_destroy_queue() freezes a request queue without
unfreezing it so the above code will introduce a deadlock and/or a use-
after-free if it executes concurrently with blk_mq_destroy_queue().
Bart.