blk-mq: make mq_queue_reinit_notify() freeze queues in parallel
authorTejun Heo <tj@kernel.org>
Tue, 4 Nov 2014 18:52:27 +0000 (13:52 -0500)
committerJens Axboe <axboe@fb.com>
Tue, 4 Nov 2014 21:49:31 +0000 (14:49 -0700)
commitf3af020b9a8d298022b811a19719df0cf461efa5
tree7468b9e6077738b941c89433d491662c7b8da8b4
parentece9c72accdc45c3a9484dacb1125ce572647288
blk-mq: make mq_queue_reinit_notify() freeze queues in parallel

q->mq_usage_counter is a percpu_ref which is killed and drained when
the queue is frozen.  On a CPU hotplug event, blk_mq_queue_reinit()
which involves freezing the queue is invoked on all existing queues.
Because percpu_ref killing and draining involve a RCU grace period,
doing the above on one queue after another may take a long time if
there are many queues on the system.

This patch splits out initiation of freezing and waiting for its
completion, and updates blk_mq_queue_reinit_notify() so that the
queues are frozen in parallel instead of one after another.  Note that
freezing and unfreezing are moved from blk_mq_queue_reinit() to
blk_mq_queue_reinit_notify().

Signed-off-by: Tejun Heo <tj@kernel.org>
Reported-by: Christian Borntraeger <borntraeger@de.ibm.com>
Tested-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
block/blk-mq.c