From nobody Mon Feb 9 23:14:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 95FAE31076D; Mon, 2 Feb 2026 08:05:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770019534; cv=none; b=M9wDQbVkNoQaFioQrgWT8jPr7nLSjW+l2D2vbobJ08ks4y1OA/ecyVyCCYNtuScU1+ySiDEB2kSsHYvXTzgZmG75uIcFaS16qNP/hKYkIwf2ov/MCTbRP1zv2NT/puXkyGEUAY4WMrArkNiaTWpEgMoaENdCpIUYyb8rfrRMDmg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770019534; c=relaxed/simple; bh=ZQxUzyRdpBdLCJgMHRWkVytDFox1oIHQ8WUnbIjEuHk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=g6kGUn/7LV8ADEh7Sf07zVR2jDuSoaeA4JQEu1YskEz+c8nqZUHl1TEg2qKfKouRQL3/kGS2UxCIGGP7FS9ic8pdq5j9nRJux8lx9ZNp60Jm9jhvitAv5BdQXCobh33RNtoTzlcatpE75xm1J5pY9vBv/7kEQi3Rpc8SoZyZTcw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 79D43C116C6; Mon, 2 Feb 2026 08:05:32 +0000 (UTC) From: Yu Kuai To: Jens Axboe Cc: linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, Ming Lei , Nilay Shroff , Hannes Reinecke , yukuai@fnnas.com Subject: [PATCH v9 3/8] blk-mq-debugfs: factor out a helper to register debugfs for all rq_qos Date: Mon, 2 Feb 2026 16:05:18 +0800 Message-ID: <20260202080523.3947504-4-yukuai@fnnas.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260202080523.3947504-1-yukuai@fnnas.com> References: <20260202080523.3947504-1-yukuai@fnnas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" There is already a helper blk_mq_debugfs_register_rqos() to register one rqos, however this helper is called synchronously when the rqos is created with queue frozen. Prepare to fix possible deadlock to create blk-mq debugfs entries while queue is still frozen. Reviewed-by: Ming Lei Reviewed-by: Nilay Shroff Signed-off-by: Yu Kuai Reviewed-by: Hannes Reinecke --- block/blk-mq-debugfs.c | 23 +++++++++++++++-------- block/blk-mq-debugfs.h | 5 +++++ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/block/blk-mq-debugfs.c b/block/blk-mq-debugfs.c index 4896525b1c05..4fe164b6d648 100644 --- a/block/blk-mq-debugfs.c +++ b/block/blk-mq-debugfs.c @@ -631,14 +631,7 @@ void blk_mq_debugfs_register(struct request_queue *q) blk_mq_debugfs_register_hctx(q, hctx); } =20 - if (q->rq_qos) { - struct rq_qos *rqos =3D q->rq_qos; - - while (rqos) { - blk_mq_debugfs_register_rqos(rqos); - rqos =3D rqos->next; - } - } + blk_mq_debugfs_register_rq_qos(q); } =20 static void blk_mq_debugfs_register_ctx(struct blk_mq_hw_ctx *hctx, @@ -769,6 +762,20 @@ void blk_mq_debugfs_register_rqos(struct rq_qos *rqos) debugfs_create_files(rqos->debugfs_dir, rqos, rqos->ops->debugfs_attrs); } =20 +void blk_mq_debugfs_register_rq_qos(struct request_queue *q) +{ + lockdep_assert_held(&q->debugfs_mutex); + + if (q->rq_qos) { + struct rq_qos *rqos =3D q->rq_qos; + + while (rqos) { + blk_mq_debugfs_register_rqos(rqos); + rqos =3D rqos->next; + } + } +} + void blk_mq_debugfs_register_sched_hctx(struct request_queue *q, struct blk_mq_hw_ctx *hctx) { diff --git a/block/blk-mq-debugfs.h b/block/blk-mq-debugfs.h index c80e453e3014..54948a266889 100644 --- a/block/blk-mq-debugfs.h +++ b/block/blk-mq-debugfs.h @@ -33,6 +33,7 @@ void blk_mq_debugfs_register_sched_hctx(struct request_qu= eue *q, struct blk_mq_hw_ctx *hctx); void blk_mq_debugfs_unregister_sched_hctx(struct blk_mq_hw_ctx *hctx); =20 +void blk_mq_debugfs_register_rq_qos(struct request_queue *q); void blk_mq_debugfs_register_rqos(struct rq_qos *rqos); void blk_mq_debugfs_unregister_rqos(struct rq_qos *rqos); #else @@ -78,6 +79,10 @@ static inline void blk_mq_debugfs_register_rqos(struct r= q_qos *rqos) { } =20 +static inline void blk_mq_debugfs_register_rq_qos(struct request_queue *q) +{ +} + static inline void blk_mq_debugfs_unregister_rqos(struct rq_qos *rqos) { } --=20 2.51.0