Add helper of blk_mq_shared_quiesce_wait() for supporting to quiesce queues in parallel, then we can just wait once if global quiesce wait is allowed. Signed-off-by: Ming Lei <ming.lei@xxxxxxxxxx> --- include/linux/blk-mq.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h index 42fe97adb807..6f3ccd604d72 100644 --- a/include/linux/blk-mq.h +++ b/include/linux/blk-mq.h @@ -788,6 +788,19 @@ static inline bool blk_mq_add_to_batch(struct request *req, return true; } +/* + * If the queue has allocated & used srcu to quiesce queue, quiesce wait is + * done via the synchronize_srcu(q->rcu), otherwise it can be done via + * shared synchronize_rcu() from other request queues in same host wide. + * + * This helper can help us to support quiescing queue in parallel, so just + * one quiesce wait is enough if shared quiesce wait is allowed. + */ +static inline bool blk_mq_shared_quiesce_wait(struct request_queue *q) +{ + return !blk_queue_has_srcu(q); +} + void blk_mq_requeue_request(struct request *rq, bool kick_requeue_list); void blk_mq_kick_requeue_list(struct request_queue *q); void blk_mq_delay_kick_requeue_list(struct request_queue *q, unsigned long msecs); -- 2.31.1