[PATCH 4/4] blk-mq: use blk_queue_enter/exit to protect debugfs file creation
Yu Kuai
yukuai at fnnas.com
Mon Feb 9 00:29:53 PST 2026
Replace the freeze depth check with blk_queue_enter()/blk_queue_exit()
which properly waits for the queue to be unfrozen and prevents new
freezes while creating debugfs files. This provides correct
synchronization without false warnings.
If the queue is dying (blk_queue_enter returns error), skip creating
the debugfs files as the queue is being torn down anyway.
Reported-by: Shinichiro Kawasaki <shinichiro.kawasaki at wdc.com>
Closes: https://lore.kernel.org/all/aYWQR7CtYdk3K39g@shinmob/
Signed-off-by: Yu Kuai <yukuai at fnnas.com>
---
block/blk-mq-debugfs.c | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/block/blk-mq-debugfs.c b/block/blk-mq-debugfs.c
index faeaa1fc86a7..03583d0d3972 100644
--- a/block/blk-mq-debugfs.c
+++ b/block/blk-mq-debugfs.c
@@ -613,11 +613,6 @@ static void debugfs_create_files(struct request_queue *q, struct dentry *parent,
const struct blk_mq_debugfs_attr *attr)
{
lockdep_assert_held(&q->debugfs_mutex);
- /*
- * Creating new debugfs entries with queue freezed has the risk of
- * deadlock.
- */
- WARN_ON_ONCE(q->mq_freeze_depth != 0);
/*
* debugfs_mutex should not be nested under other locks that can be
* grabbed while queue is frozen.
@@ -628,9 +623,19 @@ static void debugfs_create_files(struct request_queue *q, struct dentry *parent,
if (IS_ERR_OR_NULL(parent))
return;
+ /*
+ * Avoid creating debugfs files while the queue is frozen, wait for
+ * the queue to be unfrozen and prevent new freeze while creating
+ * debugfs files.
+ */
+ if (blk_queue_enter(q, 0))
+ return;
+
for (; attr->name; attr++)
debugfs_create_file_aux(attr->name, attr->mode, parent,
(void *)attr, data, &blk_mq_debugfs_fops);
+
+ blk_queue_exit(q);
}
void blk_mq_debugfs_register(struct request_queue *q)
--
2.51.0
More information about the linux-arm-kernel
mailing list