Messages in this thread Patch in this message | | | Subject | [PATCH 2/2] block: return error if too many reserved tags are requested | From | Robert Elliott <> | Date | Tue, 09 Sep 2014 19:18:07 -0500 |
| |
From: Robert Elliott <elliott@hp.com>
Make blk_mq_alloc_tag_set return an error if set->reserved_tags is greater than BLK_MQ_MAX_DEPTH minus the minimum number of tags, since: * set->queue_depth is truncated to that value * set->reserved_tags needs to be less than set->queue_depth
Signed-off-by: Robert Elliott <elliott@hp.com> --- block/blk-mq.c | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/block/blk-mq.c b/block/blk-mq.c index c49fe00..dc2970d 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -1936,16 +1936,18 @@ int blk_mq_alloc_tag_set(struct blk_mq_tag_set *set) return -EINVAL; if (!set->queue_depth) return -EINVAL; + if (set->reserved_tags > BLK_MQ_MAX_DEPTH - BLK_MQ_TAG_MIN) + return -EINVAL; if (set->queue_depth < set->reserved_tags + BLK_MQ_TAG_MIN) return -EINVAL; if (!set->nr_hw_queues || !set->ops->queue_rq || !set->ops->map_queue) return -EINVAL; - if (set->queue_depth > BLK_MQ_MAX_DEPTH) { + if (set->queue_depth > BLK_MQ_MAX_DEPTH - set->reserved_tags) { + set->queue_depth = BLK_MQ_MAX_DEPTH - set->reserved_tags; pr_info("blk-mq: reduced tag depth to %u\n", - BLK_MQ_MAX_DEPTH); - set->queue_depth = BLK_MQ_MAX_DEPTH; + set->queue_depth); } set->tags = kmalloc_node(set->nr_hw_queues *
| |