blk-mq: count the hctx as active before allocating tag
authorJianchao Wang <jianchao.w.wang@oracle.com>
Thu, 9 Aug 2018 14:34:17 +0000 (08:34 -0600)
committerJens Axboe <axboe@kernel.dk>
Thu, 9 Aug 2018 14:34:17 +0000 (08:34 -0600)
commitd263ed9926823c462f99a7679e18f0c9e5b8550d
treecffbdef4fa64044fe0bdb356d2412062ab9160e6
parentd6c02a9beb67f13d5f14f23e72fa9981e8b84477
blk-mq: count the hctx as active before allocating tag

Currently, we count the hctx as active after allocate driver tag
successfully. If a previously inactive hctx try to get tag first
time, it may fails and need to wait. However, due to the stale tag
->active_queues, the other shared-tags users are still able to
occupy all driver tags while there is someone waiting for tag.
Consequently, even if the previously inactive hctx is waked up, it
still may not be able to get a tag and could be starved.

To fix it, we count the hctx as active before try to allocate driver
tag, then when it is waiting the tag, the other shared-tag users
will reserve budget for it.

Reviewed-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Jianchao Wang <jianchao.w.wang@oracle.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-mq-tag.c
block/blk-mq.c