]> git.baikalelectronics.ru Git - kernel.git/commit
blk-mq: fix tag_get wait task can't be awakened
authorLaibin Qiu <qiulaibin@huawei.com>
Thu, 13 Jan 2022 02:55:36 +0000 (10:55 +0800)
committerJens Axboe <axboe@kernel.dk>
Thu, 13 Jan 2022 19:52:14 +0000 (12:52 -0700)
commit0b3a3c0a744972f5baee62b64f2d04950077fc4e
treec19baba7f6fcbc98312e5f261fb0aa37c9f434a5
parente3c10b9a92817770780904cbe5c6a5dc20e0a09b
blk-mq: fix tag_get wait task can't be awakened

In case of shared tags, there might be more than one hctx which
allocates from the same tags, and each hctx is limited to allocate at
most:
        hctx_max_depth = max((bt->sb.depth + users - 1) / users, 4U);

tag idle detection is lazy, and may be delayed for 30sec, so there
could be just one real active hctx(queue) but all others are actually
idle and still accounted as active because of the lazy idle detection.
Then if wake_batch is > hctx_max_depth, driver tag allocation may wait
forever on this real active hctx.

Fix this by recalculating wake_batch when inc or dec active_queues.

Fixes: cfa670be5cd28 ("blk-mq: improve support for shared tags maps")
Suggested-by: Ming Lei <ming.lei@redhat.com>
Suggested-by: John Garry <john.garry@huawei.com>
Signed-off-by: Laibin Qiu <qiulaibin@huawei.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20220113025536.1479653-1-qiulaibin@huawei.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-mq-tag.c
include/linux/sbitmap.h
lib/sbitmap.c