From: Kanchan Joshi <joshi.k@samsung.com>
To: Chaitanya Kulkarni <chaitanyak@nvidia.com>
Cc: "io-uring@vger.kernel.org" <io-uring@vger.kernel.org>,
"axboe@kernel.dk" <axboe@kernel.dk>,
"asml.silence@gmail.com" <asml.silence@gmail.com>,
"kbusch@kernel.org" <kbusch@kernel.org>,
"hch@lst.de" <hch@lst.de>,
"linux-nvme@lists.infradead.org" <linux-nvme@lists.infradead.org>,
"linux-block@vger.kernel.org" <linux-block@vger.kernel.org>,
"gost.dev@samsung.com" <gost.dev@samsung.com>,
Anuj Gupta <anuj20.g@samsung.com>
Subject: Re: [PATCH for-next v5 3/4] block: add helper to map bvec iterator for passthrough
Date: Thu, 8 Sep 2022 16:22:00 +0530 [thread overview]
Message-ID: <20220908105200.GB15034@test-zns> (raw)
In-Reply-To: <81816f51-e720-4f9c-472f-17882f70b4f9@nvidia.com>
[-- Attachment #1: Type: text/plain, Size: 3697 bytes --]
On Wed, Sep 07, 2022 at 03:32:26PM +0000, Chaitanya Kulkarni wrote:
>On 9/5/22 23:27, Kanchan Joshi wrote:
>> Add blk_rq_map_user_bvec which maps the bvec iterator into a bio and
>> places that into the request. This helper will be used in nvme for
>> uring-passthrough with fixed-buffer.
>> While at it, create another helper bio_map_get to reduce the code
>> duplication.
>>
>> Signed-off-by: Kanchan Joshi <joshi.k@samsung.com>
>> Signed-off-by: Anuj Gupta <anuj20.g@samsung.com>
>> ---
>> block/blk-map.c | 94 +++++++++++++++++++++++++++++++++++++-----
>> include/linux/blk-mq.h | 1 +
>> 2 files changed, 85 insertions(+), 10 deletions(-)
>>
>> diff --git a/block/blk-map.c b/block/blk-map.c
>> index f3768876d618..e2f268167342 100644
>> --- a/block/blk-map.c
>> +++ b/block/blk-map.c
>> @@ -241,17 +241,10 @@ static void bio_map_put(struct bio *bio)
>> }
>> }
>>
>> -static int bio_map_user_iov(struct request *rq, struct iov_iter *iter,
>> +static struct bio *bio_map_get(struct request *rq, unsigned int nr_vecs,
>> gfp_t gfp_mask)
>> {
>> - unsigned int max_sectors = queue_max_hw_sectors(rq->q);
>> - unsigned int nr_vecs = iov_iter_npages(iter, BIO_MAX_VECS);
>> struct bio *bio;
>> - int ret;
>> - int j;
>> -
>> - if (!iov_iter_count(iter))
>> - return -EINVAL;
>>
>> if (rq->cmd_flags & REQ_POLLED) {
>> blk_opf_t opf = rq->cmd_flags | REQ_ALLOC_CACHE;
>> @@ -259,13 +252,31 @@ static int bio_map_user_iov(struct request *rq, struct iov_iter *iter,
>> bio = bio_alloc_bioset(NULL, nr_vecs, opf, gfp_mask,
>> &fs_bio_set);
>> if (!bio)
>> - return -ENOMEM;
>> + return NULL;
>> } else {
>> bio = bio_kmalloc(nr_vecs, gfp_mask);
>> if (!bio)
>> - return -ENOMEM;
>> + return NULL;
>> bio_init(bio, NULL, bio->bi_inline_vecs, nr_vecs, req_op(rq));
>> }
>> + return bio;
>> +}
>> +
>> +static int bio_map_user_iov(struct request *rq, struct iov_iter *iter,
>> + gfp_t gfp_mask)
>> +{
>> + unsigned int max_sectors = queue_max_hw_sectors(rq->q);
>> + unsigned int nr_vecs = iov_iter_npages(iter, BIO_MAX_VECS);
>> + struct bio *bio;
>> + int ret;
>> + int j;
>> +
>> + if (!iov_iter_count(iter))
>> + return -EINVAL;
>> +
>> + bio = bio_map_get(rq, nr_vecs, gfp_mask);
>> + if (bio == NULL)
>> + return -ENOMEM;
>>
>> while (iov_iter_count(iter)) {
>> struct page **pages, *stack_pages[UIO_FASTIOV];
>> @@ -612,6 +623,69 @@ int blk_rq_map_user(struct request_queue *q, struct request *rq,
>> }
>> EXPORT_SYMBOL(blk_rq_map_user);
>>
>> +/* Prepare bio for passthrough IO given an existing bvec iter */
>> +int blk_rq_map_user_bvec(struct request *rq, struct iov_iter *iter)
>> +{
>> + struct request_queue *q = rq->q;
>> + size_t iter_count, nr_segs;
>> + struct bio *bio;
>> + struct bio_vec *bv, *bvec_arr, *bvprvp = NULL;
>> + struct queue_limits *lim = &q->limits;
>> + unsigned int nsegs = 0, bytes = 0;
>> + int ret, i;
>> +
>
>consider this (untested), it also sets the variable i data type same
>as it comparison variable in nr_segs the loop i.e. size_t :-
>
>+ struct bio_vec *bv, *bvec_arr, *bvprvp = NULL;
>+ struct request_queue *q = rq->q;
>+ struct queue_limits *lim = &q->limits;
>+ unsigned int nsegs = 0, bytes = 0;
>+ size_t iter_count, nr_segs, i;
>+ struct bio *bio;
>+ int ret;
>
>
>> + iter_count = iov_iter_count(iter);
>> + nr_segs = iter->nr_segs;
>> +
>> + if (!iter_count || (iter_count >> 9) > queue_max_hw_sectors(q))
>> + return -EINVAL;
>
>can we remove braces for iter_count >> 9 without impacting the intended
>functionality?
I think removing that make it hard to read.
I will fold all other changes you mentioned in v6.
[-- Attachment #2: Type: text/plain, Size: 0 bytes --]
next prev parent reply other threads:[~2022-09-08 11:02 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20220906063719epcas5p3157e79583a5412a3be81f3d96f8aaadd@epcas5p3.samsung.com>
2022-09-06 6:27 ` [PATCH for-next v5 0/4] fixed-buffer for uring-cmd/passthru Kanchan Joshi
2022-09-06 6:27 ` [PATCH for-next v5 1/4] io_uring: introduce io_uring_cmd_import_fixed Kanchan Joshi
2022-09-06 6:27 ` [PATCH for-next v5 2/4] io_uring: introduce fixed buffer support for io_uring_cmd Kanchan Joshi
2022-09-06 6:27 ` [PATCH for-next v5 3/4] block: add helper to map bvec iterator for passthrough Kanchan Joshi
2022-09-07 15:32 ` Chaitanya Kulkarni
2022-09-08 10:52 ` Kanchan Joshi [this message]
2022-09-08 14:46 ` Jens Axboe
2022-09-08 15:11 ` Pankaj Raghav
2022-09-06 6:27 ` [PATCH for-next v5 4/4] nvme: wire up fixed buffer support for nvme passthrough Kanchan Joshi
2022-09-07 14:51 ` Chaitanya Kulkarni
2022-09-08 10:47 ` Kanchan Joshi
2022-09-08 14:50 ` Jens Axboe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220908105200.GB15034@test-zns \
--to=joshi.k@samsung.com \
--cc=anuj20.g@samsung.com \
--cc=asml.silence@gmail.com \
--cc=axboe@kernel.dk \
--cc=chaitanyak@nvidia.com \
--cc=gost.dev@samsung.com \
--cc=hch@lst.de \
--cc=io-uring@vger.kernel.org \
--cc=kbusch@kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-nvme@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.