Skip to content

Commit 42ee306

Browse files
Ming Leiaxboe
authored andcommitted
blk-mq: reconfigure poll after queue map is changed
queue map can be changed when updating nr_hw_queues, so we need to reconfigure queue's poll capability. Add one helper for doing this job. Reviewed-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Ming Lei <ming.lei@redhat.com> Link: https://lore.kernel.org/r/20220308073219.91173-4-ming.lei@redhat.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
1 parent 306f13e commit 42ee306

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

block/blk-mq.c

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4010,6 +4010,17 @@ static void blk_mq_realloc_hw_ctxs(struct blk_mq_tag_set *set,
40104010
mutex_unlock(&q->sysfs_lock);
40114011
}
40124012

4013+
static void blk_mq_update_poll_flag(struct request_queue *q)
4014+
{
4015+
struct blk_mq_tag_set *set = q->tag_set;
4016+
4017+
if (set->nr_maps > HCTX_TYPE_POLL &&
4018+
set->map[HCTX_TYPE_POLL].nr_queues)
4019+
blk_queue_flag_set(QUEUE_FLAG_POLL, q);
4020+
else
4021+
blk_queue_flag_clear(QUEUE_FLAG_POLL, q);
4022+
}
4023+
40134024
int blk_mq_init_allocated_queue(struct blk_mq_tag_set *set,
40144025
struct request_queue *q)
40154026
{
@@ -4044,9 +4055,7 @@ int blk_mq_init_allocated_queue(struct blk_mq_tag_set *set,
40444055
q->tag_set = set;
40454056

40464057
q->queue_flags |= QUEUE_FLAG_MQ_DEFAULT;
4047-
if (set->nr_maps > HCTX_TYPE_POLL &&
4048-
set->map[HCTX_TYPE_POLL].nr_queues)
4049-
blk_queue_flag_set(QUEUE_FLAG_POLL, q);
4058+
blk_mq_update_poll_flag(q);
40504059

40514060
INIT_DELAYED_WORK(&q->requeue_work, blk_mq_requeue_work);
40524061
INIT_LIST_HEAD(&q->requeue_list);
@@ -4512,6 +4521,7 @@ static void __blk_mq_update_nr_hw_queues(struct blk_mq_tag_set *set,
45124521
blk_mq_update_queue_map(set);
45134522
list_for_each_entry(q, &set->tag_list, tag_set_list) {
45144523
blk_mq_realloc_hw_ctxs(set, q);
4524+
blk_mq_update_poll_flag(q);
45154525
if (q->nr_hw_queues != set->nr_hw_queues) {
45164526
int i = prev_nr_hw_queues;
45174527

0 commit comments

Comments
 (0)