Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1416862

Re: [PATCH 1/8] blk-mq: add blk_mq_alloc_request_hctx

From Jens Axboe <axboe@kernel.dk>
Newsgroups linux.kernel
Subject Re: [PATCH 1/8] blk-mq: add blk_mq_alloc_request_hctx
Date 2016-06-08 06:50 +0200
Message-ID <rHDBf-3MJ-1@gated-at.bofh.it> (permalink)
References <rHafT-1OH-3@gated-at.bofh.it> <rHafU-1OH-35@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


On 06/06/2016 03:21 PM, Christoph Hellwig wrote:
> From: Ming Lin <ming.l@ssi.samsung.com>
>
> For some protocols like NVMe over Fabrics we need to be able to send
> initialization commands to a specific queue.
>
> Based on an earlier patch from Christoph Hellwig <hch@lst.de>.
>
> Signed-off-by: Ming Lin <ming.l@ssi.samsung.com>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
>   block/blk-mq.c         | 33 +++++++++++++++++++++++++++++++++
>   include/linux/blk-mq.h |  2 ++
>   2 files changed, 35 insertions(+)
>
> diff --git a/block/blk-mq.c b/block/blk-mq.c
> index 29cbc1b..7bb45ed 100644
> --- a/block/blk-mq.c
> +++ b/block/blk-mq.c
> @@ -266,6 +266,39 @@ struct request *blk_mq_alloc_request(struct request_queue *q, int rw,
>   }
>   EXPORT_SYMBOL(blk_mq_alloc_request);
>
> +struct request *blk_mq_alloc_request_hctx(struct request_queue *q, int rw,
> +		unsigned int flags, unsigned int hctx_idx)
> +{
> +	struct blk_mq_hw_ctx *hctx;
> +	struct blk_mq_ctx *ctx;
> +	struct request *rq;
> +	struct blk_mq_alloc_data alloc_data;
> +	int ret;
> +
> +	ret = blk_queue_enter(q, flags & BLK_MQ_REQ_NOWAIT);
> +	if (ret)
> +		return ERR_PTR(ret);
> +
> +	hctx = q->queue_hw_ctx[hctx_idx];
> +	ctx = __blk_mq_get_ctx(q, cpumask_first(hctx->cpumask));
> +
> +	blk_mq_set_alloc_data(&alloc_data, q, flags, ctx, hctx);
> +
> +	rq = __blk_mq_alloc_request(&alloc_data, rw);
> +	if (!rq && !(flags & BLK_MQ_REQ_NOWAIT)) {
> +		__blk_mq_run_hw_queue(hctx);
> +
> +		rq =  __blk_mq_alloc_request(&alloc_data, rw);
> +	}

Why are we duplicating this code here? If NOWAIT isn't set, then we'll
always return a request. bt_get() will run the queue for us, if it needs
to. blk_mq_alloc_request() does this too, and I'm guessing that code was
just copied. I'll fix that up. Looks like this should just be:

	rq = __blk_mq_alloc_request(&alloc_data, rw);
	if (rq)
		return rq;

	blk_queue_exit(q);
	return ERR_PTR(-EWOULDBLOCK);

for this case.

-- 
Jens Axboe

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 1/8] blk-mq: add blk_mq_alloc_request_hctx Christoph Hellwig <hch@lst.de> - 2016-06-06 23:30 +0200
  Re: [PATCH 1/8] blk-mq: add blk_mq_alloc_request_hctx Keith Busch <keith.busch@intel.com> - 2016-06-07 17:00 +0200
    Re: [PATCH 1/8] blk-mq: add blk_mq_alloc_request_hctx Ming Lin <mlin@kernel.org> - 2016-06-07 17:30 +0200
      Re: [PATCH 1/8] blk-mq: add blk_mq_alloc_request_hctx Ming Lin <mlin@kernel.org> - 2016-06-08 01:30 +0200
  Re: [PATCH 1/8] blk-mq: add blk_mq_alloc_request_hctx Jens Axboe <axboe@kernel.dk> - 2016-06-08 06:50 +0200
    Re: [PATCH 1/8] blk-mq: add blk_mq_alloc_request_hctx Ming Lin <mlin@kernel.org> - 2016-06-08 07:30 +0200
      Re: [PATCH 1/8] blk-mq: add blk_mq_alloc_request_hctx Christoph Hellwig <hch@lst.de> - 2016-06-08 14:00 +0200
    Re: [PATCH 1/8] blk-mq: add blk_mq_alloc_request_hctx Christoph Hellwig <hch@lst.de> - 2016-06-08 14:00 +0200

csiph-web