blk_mq_update_nr_hw_queues() freezes and unfreezes queues internally. When the queue is already frozen before this call, the freeze depth becomes 2. The internal unfreeze only decrements it to 1, leaving the queue still frozen when debugfs_create_files() is called. This triggers WARN_ON_ONCE(q->mq_freeze_depth != 0) in debugfs_create_files() and risks deadlock. Fix this by moving nvme_unfreeze() before blk_mq_update_nr_hw_queues() so the queue is unfrozen before the call, allowing the internal freeze/unfreeze to work correctly. Signed-off-by: Yu Kuai --- drivers/nvme/host/rdma.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c index 35c0822edb2d..b0253d90ac86 100644 --- a/drivers/nvme/host/rdma.c +++ b/drivers/nvme/host/rdma.c @@ -898,9 +898,9 @@ static int nvme_rdma_configure_io_queues(struct nvme_rdma_ctrl *ctrl, bool new) nvme_unfreeze(&ctrl->ctrl); goto out_wait_freeze_timed_out; } + nvme_unfreeze(&ctrl->ctrl); blk_mq_update_nr_hw_queues(ctrl->ctrl.tagset, ctrl->ctrl.queue_count - 1); - nvme_unfreeze(&ctrl->ctrl); } /* -- 2.51.0