|
Hannes Reinecke |
e22297 |
From: Bart Van Assche <bvanassche@acm.org>
|
|
Hannes Reinecke |
e22297 |
Date: Thu, 13 May 2021 10:15:29 -0700
|
|
Hannes Reinecke |
e22297 |
Subject: [PATCH] blk-mq: Swap two calls in blk_mq_exit_queue()
|
|
Hannes Reinecke |
e22297 |
Git-commit: 630ef623ed26c18a457cdc070cf24014e50129c2
|
|
Hannes Reinecke |
e22297 |
Patch-mainline: v5.13-rc2
|
|
Hannes Reinecke |
e22297 |
References: git-fixes
|
|
Hannes Reinecke |
e22297 |
|
|
Hannes Reinecke |
e22297 |
If a tag set is shared across request queues (e.g. SCSI LUNs) then the
|
|
Hannes Reinecke |
e22297 |
block layer core keeps track of the number of active request queues in
|
|
Hannes Reinecke |
e22297 |
tags->active_queues. blk_mq_tag_busy() and blk_mq_tag_idle() update that
|
|
Hannes Reinecke |
e22297 |
atomic counter if the hctx flag BLK_MQ_F_TAG_QUEUE_SHARED is set. Make
|
|
Hannes Reinecke |
e22297 |
sure that blk_mq_exit_queue() calls blk_mq_tag_idle() before that flag is
|
|
Hannes Reinecke |
e22297 |
cleared by blk_mq_del_queue_tag_set().
|
|
Hannes Reinecke |
e22297 |
|
|
Hannes Reinecke |
e22297 |
Cc: Christoph Hellwig <hch@infradead.org>
|
|
Hannes Reinecke |
e22297 |
Cc: Ming Lei <ming.lei@redhat.com>
|
|
Hannes Reinecke |
e22297 |
Cc: Hannes Reinecke <hare@suse.com>
|
|
Hannes Reinecke |
e22297 |
Fixes: 0d2602ca30e4 ("blk-mq: improve support for shared tags maps")
|
|
Hannes Reinecke |
e22297 |
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
|
|
Hannes Reinecke |
e22297 |
Reviewed-by: Ming Lei <ming.lei@redhat.com>
|
|
Hannes Reinecke |
e22297 |
Link: https://lore.kernel.org/r/20210513171529.7977-1-bvanassche@acm.org
|
|
Hannes Reinecke |
e22297 |
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
|
Hannes Reinecke |
e22297 |
Acked-by: Hannes Reinecke <hare@suse.com>
|
|
Hannes Reinecke |
e22297 |
---
|
|
Hannes Reinecke |
e22297 |
block/blk-mq.c | 6 ++++--
|
|
Hannes Reinecke |
e22297 |
1 file changed, 4 insertions(+), 2 deletions(-)
|
|
Hannes Reinecke |
e22297 |
|
|
Hannes Reinecke |
e22297 |
diff --git a/block/blk-mq.c b/block/blk-mq.c
|
|
Hannes Reinecke |
e22297 |
index 28ef0248efba..c86c01bfecdb 100644
|
|
Hannes Reinecke |
e22297 |
--- a/block/blk-mq.c
|
|
Hannes Reinecke |
e22297 |
+++ b/block/blk-mq.c
|
|
Hannes Reinecke |
e22297 |
@@ -3286,10 +3286,12 @@ EXPORT_SYMBOL(blk_mq_init_allocated_queue);
|
|
Hannes Reinecke |
e22297 |
/* tags can _not_ be used after returning from blk_mq_exit_queue */
|
|
Hannes Reinecke |
e22297 |
void blk_mq_exit_queue(struct request_queue *q)
|
|
Hannes Reinecke |
e22297 |
{
|
|
Hannes Reinecke |
e22297 |
- struct blk_mq_tag_set *set = q->tag_set;
|
|
Hannes Reinecke |
e22297 |
+ struct blk_mq_tag_set *set = q->tag_set;
|
|
Hannes Reinecke |
e22297 |
|
|
Hannes Reinecke |
e22297 |
- blk_mq_del_queue_tag_set(q);
|
|
Hannes Reinecke |
e22297 |
+ /* Checks hctx->flags & BLK_MQ_F_TAG_QUEUE_SHARED. */
|
|
Hannes Reinecke |
e22297 |
blk_mq_exit_hw_queues(q, set, set->nr_hw_queues);
|
|
Hannes Reinecke |
e22297 |
+ /* May clear BLK_MQ_F_TAG_QUEUE_SHARED in hctx->flags. */
|
|
Hannes Reinecke |
e22297 |
+ blk_mq_del_queue_tag_set(q);
|
|
Hannes Reinecke |
e22297 |
}
|
|
Hannes Reinecke |
e22297 |
|
|
Hannes Reinecke |
e22297 |
static int __blk_mq_alloc_rq_maps(struct blk_mq_tag_set *set)
|
|
Hannes Reinecke |
e22297 |
--
|
|
Hannes Reinecke |
e22297 |
2.29.2
|
|
Hannes Reinecke |
e22297 |
|