block: update hctx map when use multiple maps
authorWeiping Zhang <zhangweiping@didiglobal.com>
Wed, 17 Jun 2020 06:18:37 +0000 (14:18 +0800)
committerSasha Levin <sashal@kernel.org>
Tue, 30 Jun 2020 19:37:06 +0000 (15:37 -0400)
commit26b0956cb374171832b730996a59411649d7047d
tree039a533e5bb2992605438860b015eb697e5a3c03
parent72647ea37700b7baefbc4df15371e3e75cb8c301
block: update hctx map when use multiple maps

[ Upstream commit fe35ec58f0d339221643287bbb7cee15c93a5389 ]

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 <zhangweiping@didiglobal.com>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
block/blk-mq.c