Commit 7f2799c5 authored by Yu Kuai's avatar Yu Kuai Committed by Jens Axboe
Browse files

blk-mq: cleanup shared tags case in blk_mq_update_nr_requests()



For shared tags case, all hctx->sched_tags/tags are the same, it doesn't
make sense to call into blk_mq_tag_update_depth() multiple times for the
same tags.

Signed-off-by: default avatarYu Kuai <yukuai3@huawei.com>
Reviewed-by: default avatarNilay Shroff <nilay@linux.ibm.com>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 626ff4f8
Loading
Loading
Loading
Loading
+0 −7
Original line number Diff line number Diff line
@@ -622,13 +622,6 @@ int blk_mq_tag_update_depth(struct blk_mq_hw_ctx *hctx,
		struct blk_mq_tag_set *set = hctx->queue->tag_set;
		struct blk_mq_tags *new;

		/*
		 * Only the sbitmap needs resizing since we allocated the max
		 * initially.
		 */
		if (blk_mq_is_shared_tags(set->flags))
			return 0;

		new = blk_mq_alloc_map_and_rqs(set, hctx->queue_num, tdepth);
		if (!new)
			return -ENOMEM;
+22 −21
Original line number Diff line number Diff line
@@ -4935,34 +4935,35 @@ int blk_mq_update_nr_requests(struct request_queue *q, unsigned int nr)

	blk_mq_quiesce_queue(q);

	if (blk_mq_is_shared_tags(set->flags)) {
		if (q->elevator)
			blk_mq_tag_update_sched_shared_tags(q);
		else
			blk_mq_tag_resize_shared_tags(set, nr);
	} else {
		queue_for_each_hw_ctx(q, hctx, i) {
			if (!hctx->tags)
				continue;
			/*
		 * If we're using an MQ scheduler, just update the scheduler
		 * queue depth. This is similar to what the old code would do.
			 * If we're using an MQ scheduler, just update the
			 * scheduler queue depth. This is similar to what the
			 * old code would do.
			 */
		if (hctx->sched_tags) {
			ret = blk_mq_tag_update_depth(hctx, &hctx->sched_tags,
						      nr);
		} else {
			ret = blk_mq_tag_update_depth(hctx, &hctx->tags, nr);
		}
			if (hctx->sched_tags)
				ret = blk_mq_tag_update_depth(hctx,
							&hctx->sched_tags, nr);
			else
				ret = blk_mq_tag_update_depth(hctx,
							&hctx->tags, nr);
			if (ret)
				goto out;
		}
	}

	q->nr_requests = nr;
	if (q->elevator && q->elevator->type->ops.depth_updated)
		q->elevator->type->ops.depth_updated(q);

	if (blk_mq_is_shared_tags(set->flags)) {
		if (q->elevator)
			blk_mq_tag_update_sched_shared_tags(q);
		else
			blk_mq_tag_resize_shared_tags(set, nr);
	}

out:
	blk_mq_unquiesce_queue(q);