blk-mq: account active requests when get driver tag
authorChengming Zhou <zhouchengming@bytedance.com>
Wed, 13 Sep 2023 15:16:12 +0000 (15:16 +0000)
committerJens Axboe <axboe@kernel.dk>
Fri, 22 Sep 2023 14:52:13 +0000 (08:52 -0600)
commitb8643d682669994b3f57c3440df3d4f9cb735f35
tree35b49bc8dc17365c9e7dcbc74c71ee6cde581321
parentce9ecca0238b140b88f43859b211c9fdfd8e5b70
blk-mq: account active requests when get driver tag

There is a limit that batched queue_rqs() can't work on shared tags
queue, since the account of active requests can't be done there.

Now we account the active requests only in blk_mq_get_driver_tag(),
which is not the time we get driver tag actually (with none elevator).

To support batched queue_rqs() on shared tags queue, we move the
account of active requests to where we get the driver tag:

1. none elevator: blk_mq_get_tags() and blk_mq_get_tag()
2. other elevator: __blk_mq_alloc_driver_tag()

This is clearer and match with the unaccount side, which just happen
when we put the driver tag.

The other good point is that we don't need RQF_MQ_INFLIGHT trick
anymore, which used to avoid double account of flush request.
Now we only account when actually get the driver tag, so all is good.
We will remove RQF_MQ_INFLIGHT in the next patch.

Signed-off-by: Chengming Zhou <zhouchengming@bytedance.com>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Link: https://lore.kernel.org/r/20230913151616.3164338-2-chengming.zhou@linux.dev
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-mq.c
block/blk-mq.h