Skip to content

Commit fe35ec5

Browse files
Weiping Zhangaxboe
authored andcommitted
block: update hctx map when use multiple maps
There is an issue when tune the number for read and write queues, if the total queue count was not changed. The hctx->type cannot be updated, since __blk_mq_update_nr_hw_queues will return directly if the total queue count has not been changed. Reproduce: dmesg | grep "default/read/poll" [ 2.607459] nvme nvme0: 48/0/0 default/read/poll queues cat /sys/kernel/debug/block/nvme0n1/hctx*/type | sort | uniq -c 48 default tune the write queues to 24: echo 24 > /sys/module/nvme/parameters/write_queues echo 1 > /sys/block/nvme0n1/device/reset_controller dmesg | grep "default/read/poll" [ 433.547235] nvme nvme0: 24/24/0 default/read/poll queues cat /sys/kernel/debug/block/nvme0n1/hctx*/type | sort | uniq -c 48 default The driver's hardware queue mapping is not same as block layer. Signed-off-by: Weiping Zhang <[email protected]> Reviewed-by: Ming Lei <[email protected]> Signed-off-by: Jens Axboe <[email protected]>
1 parent c3dbe54 commit fe35ec5

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

block/blk-mq.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3479,7 +3479,9 @@ static void __blk_mq_update_nr_hw_queues(struct blk_mq_tag_set *set,
34793479

34803480
if (set->nr_maps == 1 && nr_hw_queues > nr_cpu_ids)
34813481
nr_hw_queues = nr_cpu_ids;
3482-
if (nr_hw_queues < 1 || nr_hw_queues == set->nr_hw_queues)
3482+
if (nr_hw_queues < 1)
3483+
return;
3484+
if (set->nr_maps == 1 && nr_hw_queues == set->nr_hw_queues)
34833485
return;
34843486

34853487
list_for_each_entry(q, &set->tag_list, tag_set_list)

0 commit comments

Comments
 (0)