[PATCH 00/10] blk-mq: fix blk_mq_tags double free while nr_requests grown
From: Yu Kuai
Date: Fri Aug 15 2025 - 04:10:48 EST
From: Yu Kuai <yukuai3@xxxxxxxxxx>
In the case user trigger tags grow by queue sysfs attribute nr_requests,
hctx->sched_tags will be freed directly and replaced with a new
allocated tags, see blk_mq_tag_update_depth().
The problem is that hctx->sched_tags is from elevator->et->tags, while
et->tags is still the freed tags, hence later elevator exist will try to
free the tags again, causing kernel panic.
patch 1-6 are prep cleanup and refactor patches for updating nr_requests
patch 7,8 are the fix patches for the regression
patch 9 is cleanup patch after patch 8
patch 10 fix the stale nr_requests documentation
Yu Kuai (10):
blk-mq: remove useless checking from queue_requests_store()
blk-mq: remove useless checkings from blk_mq_update_nr_requests()
blk-mq: check invalid nr_requests in queue_requests_store()
blk-mq: serialize updating nr_requests with update_nr_hwq_lock
blk-mq: cleanup shared tags case in blk_mq_update_nr_requests()
blk-mq: split bitmap grow and resize case in
blk_mq_update_nr_requests()
blk-mq-sched: add new parameter nr_requests in
blk_mq_alloc_sched_tags()
blk-mq: fix blk_mq_tags double free while nr_requests grown
blk-mq: remove blk_mq_tag_update_depth()
blk-mq: fix stale nr_requests documentation
Documentation/ABI/stable/sysfs-block | 14 ++-----
block/blk-mq-sched.c | 14 +++----
block/blk-mq-sched.h | 2 +-
block/blk-mq-tag.c | 52 -----------------------
block/blk-mq.c | 62 +++++++++++-----------------
block/blk-mq.h | 17 ++++++--
block/blk-sysfs.c | 44 +++++++++++++++-----
block/elevator.c | 3 +-
8 files changed, 84 insertions(+), 124 deletions(-)
--
2.39.2