Skip to content

Commit dc96cef

Browse files
YuKuai-huaweiaxboe
authored andcommitted
blk-mq: fix stale tag depth for shared sched tags in blk_mq_update_nr_requests()
Commit 7f2799c ("blk-mq: cleanup shared tags case in blk_mq_update_nr_requests()") moves blk_mq_tag_update_sched_shared_tags() before q->nr_requests is updated, however, it's still using the old q->nr_requests to resize tag depth. Fix this problem by passing in expected new tag depth. Fixes: 7f2799c ("blk-mq: cleanup shared tags case in blk_mq_update_nr_requests()") Signed-off-by: Yu Kuai <yukuai3@huawei.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Reviewed-by: Nilay Shroff <nilay@linux.ibm.com> Reported-by: Chris Mason <clm@meta.com> Link: https://lore.kernel.org/linux-block/20251014130507.4187235-2-clm@meta.com/ Signed-off-by: Jens Axboe <axboe@kernel.dk>
1 parent 455281c commit dc96cef

File tree

4 files changed

+7
-5
lines changed

4 files changed

+7
-5
lines changed

block/blk-mq-sched.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -557,7 +557,7 @@ int blk_mq_init_sched(struct request_queue *q, struct elevator_type *e,
557557
if (blk_mq_is_shared_tags(flags)) {
558558
/* Shared tags are stored at index 0 in @et->tags. */
559559
q->sched_shared_tags = et->tags[0];
560-
blk_mq_tag_update_sched_shared_tags(q);
560+
blk_mq_tag_update_sched_shared_tags(q, et->nr_requests);
561561
}
562562

563563
queue_for_each_hw_ctx(q, hctx, i) {

block/blk-mq-tag.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -622,10 +622,11 @@ void blk_mq_tag_resize_shared_tags(struct blk_mq_tag_set *set, unsigned int size
622622
sbitmap_queue_resize(&tags->bitmap_tags, size - set->reserved_tags);
623623
}
624624

625-
void blk_mq_tag_update_sched_shared_tags(struct request_queue *q)
625+
void blk_mq_tag_update_sched_shared_tags(struct request_queue *q,
626+
unsigned int nr)
626627
{
627628
sbitmap_queue_resize(&q->sched_shared_tags->bitmap_tags,
628-
q->nr_requests - q->tag_set->reserved_tags);
629+
nr - q->tag_set->reserved_tags);
629630
}
630631

631632
/**

block/blk-mq.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4941,7 +4941,7 @@ struct elevator_tags *blk_mq_update_nr_requests(struct request_queue *q,
49414941
* tags can't grow, see blk_mq_alloc_sched_tags().
49424942
*/
49434943
if (q->elevator)
4944-
blk_mq_tag_update_sched_shared_tags(q);
4944+
blk_mq_tag_update_sched_shared_tags(q, nr);
49454945
else
49464946
blk_mq_tag_resize_shared_tags(set, nr);
49474947
} else if (!q->elevator) {

block/blk-mq.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,8 @@ void blk_mq_put_tag(struct blk_mq_tags *tags, struct blk_mq_ctx *ctx,
186186
void blk_mq_put_tags(struct blk_mq_tags *tags, int *tag_array, int nr_tags);
187187
void blk_mq_tag_resize_shared_tags(struct blk_mq_tag_set *set,
188188
unsigned int size);
189-
void blk_mq_tag_update_sched_shared_tags(struct request_queue *q);
189+
void blk_mq_tag_update_sched_shared_tags(struct request_queue *q,
190+
unsigned int nr);
190191

191192
void blk_mq_tag_wakeup_all(struct blk_mq_tags *tags, bool);
192193
void blk_mq_queue_tag_busy_iter(struct request_queue *q, busy_tag_iter_fn *fn,

0 commit comments

Comments
 (0)