blk-mq: Allow blocking queue tag iter callbacks
authorKeith Busch <keith.busch@intel.com>
Tue, 25 Sep 2018 16:36:20 +0000 (10:36 -0600)
committerJens Axboe <axboe@kernel.dk>
Wed, 26 Sep 2018 02:17:59 +0000 (20:17 -0600)
commit530ca2c9bd6949c72c9b5cfc330cb3dbccaa3f5b
treef25bd9aa92fc0042974192d81b705253ddd8c597
parentb57e99b4b8b0ebdf9707424e7ddc0c392bdc5fe6
blk-mq: Allow blocking queue tag iter callbacks

A recent commit runs tag iterator callbacks under the rcu read lock,
but existing callbacks do not satisfy the non-blocking requirement.
The commit intended to prevent an iterator from accessing a queue that's
being modified. This patch fixes the original issue by taking a queue
reference instead of reading it, which allows callbacks to make blocking
calls.

Fixes: f5bbbbe4d6357 ("blk-mq: sync the update nr_hw_queues with blk_mq_queue_tag_busy_iter")
Acked-by: Jianchao Wang <jianchao.w.wang@oracle.com>
Signed-off-by: Keith Busch <keith.busch@intel.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-mq-tag.c