mirror of https://gitee.com/openkylin/linux.git
blk-mq: bump max tag depth to 10K tags
For some scsi-mq cases, the tag map can be huge. So increase the max number of tags we support. Additionally, don't fail with EINVAL if a user requests too many tags. Warn that the tag depth has been adjusted down, and store the new value inside the tag_set passed in. Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
parent
f27b087b81
commit
a4391c6465
|
@ -1967,13 +1967,19 @@ static int blk_mq_queue_reinit_notify(struct notifier_block *nb,
|
||||||
return NOTIFY_OK;
|
return NOTIFY_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Alloc a tag set to be associated with one or more request queues.
|
||||||
|
* May fail with EINVAL for various error conditions. May adjust the
|
||||||
|
* requested depth down, if if it too large. In that case, the set
|
||||||
|
* value will be stored in set->queue_depth.
|
||||||
|
*/
|
||||||
int blk_mq_alloc_tag_set(struct blk_mq_tag_set *set)
|
int blk_mq_alloc_tag_set(struct blk_mq_tag_set *set)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (!set->nr_hw_queues)
|
if (!set->nr_hw_queues)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
if (!set->queue_depth || set->queue_depth > BLK_MQ_MAX_DEPTH)
|
if (!set->queue_depth)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
if (set->queue_depth < set->reserved_tags + BLK_MQ_TAG_MIN)
|
if (set->queue_depth < set->reserved_tags + BLK_MQ_TAG_MIN)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -1981,6 +1987,11 @@ int blk_mq_alloc_tag_set(struct blk_mq_tag_set *set)
|
||||||
if (!set->nr_hw_queues || !set->ops->queue_rq || !set->ops->map_queue)
|
if (!set->nr_hw_queues || !set->ops->queue_rq || !set->ops->map_queue)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (set->queue_depth > BLK_MQ_MAX_DEPTH) {
|
||||||
|
pr_info("blk-mq: reduced tag depth to %u\n",
|
||||||
|
BLK_MQ_MAX_DEPTH);
|
||||||
|
set->queue_depth = BLK_MQ_MAX_DEPTH;
|
||||||
|
}
|
||||||
|
|
||||||
set->tags = kmalloc_node(set->nr_hw_queues *
|
set->tags = kmalloc_node(set->nr_hw_queues *
|
||||||
sizeof(struct blk_mq_tags *),
|
sizeof(struct blk_mq_tags *),
|
||||||
|
|
|
@ -135,7 +135,7 @@ enum {
|
||||||
BLK_MQ_S_STOPPED = 0,
|
BLK_MQ_S_STOPPED = 0,
|
||||||
BLK_MQ_S_TAG_ACTIVE = 1,
|
BLK_MQ_S_TAG_ACTIVE = 1,
|
||||||
|
|
||||||
BLK_MQ_MAX_DEPTH = 2048,
|
BLK_MQ_MAX_DEPTH = 10240,
|
||||||
|
|
||||||
BLK_MQ_CPU_WORK_BATCH = 8,
|
BLK_MQ_CPU_WORK_BATCH = 8,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue