|
|
@@ -2570,6 +2570,14 @@ static int blk_mq_alloc_rq_maps(struct blk_mq_tag_set *set)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int blk_mq_update_queue_map(struct blk_mq_tag_set *set)
|
|
|
+{
|
|
|
+ if (set->ops->map_queues)
|
|
|
+ return set->ops->map_queues(set);
|
|
|
+ else
|
|
|
+ return blk_mq_map_queues(set);
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* Alloc a tag set to be associated with one or more request queues.
|
|
|
* May fail with EINVAL for various error conditions. May adjust the
|
|
|
@@ -2624,10 +2632,7 @@ int blk_mq_alloc_tag_set(struct blk_mq_tag_set *set)
|
|
|
if (!set->mq_map)
|
|
|
goto out_free_tags;
|
|
|
|
|
|
- if (set->ops->map_queues)
|
|
|
- ret = set->ops->map_queues(set);
|
|
|
- else
|
|
|
- ret = blk_mq_map_queues(set);
|
|
|
+ ret = blk_mq_update_queue_map(set);
|
|
|
if (ret)
|
|
|
goto out_free_mq_map;
|
|
|
|
|
|
@@ -2719,6 +2724,7 @@ void blk_mq_update_nr_hw_queues(struct blk_mq_tag_set *set, int nr_hw_queues)
|
|
|
blk_mq_freeze_queue(q);
|
|
|
|
|
|
set->nr_hw_queues = nr_hw_queues;
|
|
|
+ blk_mq_update_queue_map(set);
|
|
|
list_for_each_entry(q, &set->tag_list, tag_set_list) {
|
|
|
blk_mq_realloc_hw_ctxs(set, q);
|
|
|
|