• M
    blk-mq: use QUEUE_FLAG_QUIESCED to quiesce queue · f4560ffe
    Ming Lei 提交于
    It is required that no dispatch can happen any more once
    blk_mq_quiesce_queue() returns, and we don't have such requirement
    on APIs of stopping queue.
    
    But blk_mq_quiesce_queue() still may not block/drain dispatch in the
    the case of BLK_MQ_S_START_ON_RUN, so use the new introduced flag of
    QUEUE_FLAG_QUIESCED and evaluate it inside RCU read-side critical
    sections for fixing this issue.
    
    Also blk_mq_quiesce_queue() is implemented via stopping queue, which
    limits its uses, and easy to cause race, because any queue restart in
    other paths may break blk_mq_quiesce_queue(). With the introduced
    flag of QUEUE_FLAG_QUIESCED, we don't need to depend on stopping queue
    for quiescing any more.
    Signed-off-by: NMing Lei <ming.lei@redhat.com>
    Reviewed-by: NBart Van Assche <Bart.VanAssche@sandisk.com>
    Signed-off-by: NJens Axboe <axboe@kernel.dk>
    f4560ffe
blk-mq.c 70.0 KB