From: Robert Elliott <[email protected]> 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 <[email protected]> --- 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 * -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

