blk-mq: allow blk_mq_make_request to consume the q_usage_counter reference
authorChristoph Hellwig <hch@lst.de>
Sat, 16 May 2020 18:28:01 +0000 (20:28 +0200)
committerJens Axboe <axboe@kernel.dk>
Tue, 19 May 2020 15:34:29 +0000 (09:34 -0600)
commitac7c5675fa45a372fab27d78a72d2e10e4734959
tree7add7a513b2d64e636acf3d3912f8cf292253ad7
parent35b371ff01410ec7c73312f1c1c320de35fcfd0f
blk-mq: allow blk_mq_make_request to consume the q_usage_counter reference

blk_mq_make_request currently needs to grab an q_usage_counter
reference when allocating a request.  This is because the block layer
grabs one before calling blk_mq_make_request, but also releases it as
soon as blk_mq_make_request returns.  Remove the blk_queue_exit call
after blk_mq_make_request returns, and instead let it consume the
reference.  This works perfectly fine for the block layer caller, just
device mapper needs an extra reference as the old problem still
persists there.  Open code blk_queue_enter_live in device mapper,
as there should be no other callers and this allows better documenting
why we do a non-try get.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-core.c
block/blk-mq.c
block/blk.h
drivers/md/dm.c