path: root/block/blk-flush.c
diff options
authorBart Van Assche <>2016-11-02 10:09:51 -0600
committerJens Axboe <>2016-11-02 12:50:19 -0600
commit6a83e74d214a47a1371cd2e6a783264fcba7d428 (patch)
tree871df14894af953b8486575a2803f038c8f33c4a /block/blk-flush.c
parent9b7dd572cc439fa92e120290eb74d0295567c5a0 (diff)
blk-mq: Introduce blk_mq_quiesce_queue()
blk_mq_quiesce_queue() waits until ongoing .queue_rq() invocations have finished. This function does *not* wait until all outstanding requests have finished (this means invocation of request.end_io()). The algorithm used by blk_mq_quiesce_queue() is as follows: * Hold either an RCU read lock or an SRCU read lock around .queue_rq() calls. The former is used if .queue_rq() does not block and the latter if .queue_rq() may block. * blk_mq_quiesce_queue() first calls blk_mq_stop_hw_queues() followed by synchronize_srcu() or synchronize_rcu(). The latter call waits for .queue_rq() invocations that started before blk_mq_quiesce_queue() was called. * The blk_mq_hctx_stopped() calls that control whether or not .queue_rq() will be called are called with the (S)RCU read lock held. This is necessary to avoid race conditions against blk_mq_quiesce_queue(). Signed-off-by: Bart Van Assche <> Cc: Hannes Reinecke <> Cc: Johannes Thumshirn <> Reviewed-by: Sagi Grimberg <> Reviewed-by: Ming Lei <> Reviewed-by: Christoph Hellwig <> Signed-off-by: Jens Axboe <>
Diffstat (limited to 'block/blk-flush.c')
0 files changed, 0 insertions, 0 deletions