From: Mikulas Patocka <mpatocka@redhat.com>
To: Jens Axboe <axboe@kernel.dk>
Cc: Keith Busch <kbusch@kernel.org>, Christoph Hellwig <hch@lst.de>,
Sagi Grimberg <sagi@grimberg.me>,
Mike Snitzer <snitzer@kernel.org>,
Milan Broz <gmazyland@gmail.com>,
linux-block@vger.kernel.org, dm-devel@lists.linux.dev,
linux-nvme@lists.infradead.org
Subject: Re: [PATCH v2] block: change rq_integrity_vec to respect the iterator
Date: Thu, 23 May 2024 17:11:16 +0200 (CEST) [thread overview]
Message-ID: <798720bc-bc69-1e1c-8436-474e8a9fb0e8@redhat.com> (raw)
In-Reply-To: <b1ca89ae-1500-4c3c-bd8a-74e081aa8dd3@kernel.dk>
On Thu, 23 May 2024, Jens Axboe wrote:
> On 5/23/24 8:58 AM, Mikulas Patocka wrote:
> > Here I'm resending the patch with the function rq_integrity_vec removed if
> > CONFIG_BLK_DEV_INTEGRITY is not defined.
>
> That looks better - but can you please just post a full new series,
> that's a lot easier to deal with and look at than adding a v2 of one
> patch in the thread.
OK, I'll post both patches.
> > @@ -853,16 +855,20 @@ static blk_status_t nvme_prep_rq(struct
> > goto out_free_cmd;
> > }
> >
> > +#ifdef CONFIG_BLK_DEV_INTEGRITY
> > if (blk_integrity_rq(req)) {
> > ret = nvme_map_metadata(dev, req, &iod->cmd);
> > if (ret)
> > goto out_unmap_data;
> > }
> > +#endif
>
> if (IS_ENABLED(CONFIG_BLK_DEV_INTEGRITY) && blk_integrity_rq(req)) {
>
> ?
That wouldn't work, because the calls to rq_integrity_vec need to be
eliminated by the preprocessor.
Should I change rq_integrity_vec to this? Then, we could get rid of the
ifdefs and let the optimizer remove all calls to rq_integrity_vec.
static inline struct bio_vec rq_integrity_vec(struct request *rq)
{
struct bio_vec bv = { };
return bv;
}
> > @@ -962,12 +968,14 @@ static __always_inline void nvme_pci_unm
> > struct nvme_queue *nvmeq = req->mq_hctx->driver_data;
> > struct nvme_dev *dev = nvmeq->dev;
> >
> > +#ifdef CONFIG_BLK_DEV_INTEGRITY
> > if (blk_integrity_rq(req)) {
> > struct nvme_iod *iod = blk_mq_rq_to_pdu(req);
>
> Ditto
>
> > Index: linux-2.6/include/linux/blk-integrity.h
> > ===================================================================
> > --- linux-2.6.orig/include/linux/blk-integrity.h
> > +++ linux-2.6/include/linux/blk-integrity.h
> > @@ -109,11 +109,11 @@ static inline bool blk_integrity_rq(stru
> > * Return the first bvec that contains integrity data. Only drivers that are
> > * limited to a single integrity segment should use this helper.
> > */
> > -static inline struct bio_vec *rq_integrity_vec(struct request *rq)
> > +static inline struct bio_vec rq_integrity_vec(struct request *rq)
> > {
> > - if (WARN_ON_ONCE(queue_max_integrity_segments(rq->q) > 1))
> > - return NULL;
> > - return rq->bio->bi_integrity->bip_vec;
> > + WARN_ON_ONCE(queue_max_integrity_segments(rq->q) > 1);
> > + return mp_bvec_iter_bvec(rq->bio->bi_integrity->bip_vec,
> > + rq->bio->bi_integrity->bip_iter);
> > }
>
> Not clear why the return on integrity segments > 1 is removed?
Because we can't return NULL. But I can leave it there, print a warning
and return the first vector.
Mikulas
> --
> Jens Axboe
>
next prev parent reply other threads:[~2024-05-23 15:11 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-15 13:27 [RFC PATCH 0/2] dm-crypt support for per-sector NVMe metadata Mikulas Patocka
2024-05-15 13:28 ` [RFC PATCH 1/2] block: change rq_integrity_vec to respect the iterator Mikulas Patocka
2024-05-16 2:30 ` Jens Axboe
2024-05-20 12:53 ` Mikulas Patocka
2024-05-23 14:58 ` [PATCH v2] " Mikulas Patocka
2024-05-23 15:01 ` Jens Axboe
2024-05-23 15:11 ` Mikulas Patocka [this message]
2024-05-23 15:22 ` Anuj gupta
2024-05-23 15:33 ` Jens Axboe
2024-05-23 15:48 ` Mikulas Patocka
2024-05-16 8:14 ` [RFC PATCH 1/2] " Ming Lei
2024-05-20 12:42 ` Mikulas Patocka
2024-05-20 13:19 ` Ming Lei
2024-05-15 13:30 ` [RFC PATCH 2/2] dm-crypt: support per-sector NVMe metadata Mikulas Patocka
2024-05-27 22:12 ` [RFC PATCH 0/2] dm-crypt support for " Eric Wheeler
2024-05-28 7:25 ` Milan Broz
2024-05-28 23:55 ` Eric Wheeler
2024-05-28 11:16 ` Mikulas Patocka
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=798720bc-bc69-1e1c-8436-474e8a9fb0e8@redhat.com \
--to=mpatocka@redhat.com \
--cc=axboe@kernel.dk \
--cc=dm-devel@lists.linux.dev \
--cc=gmazyland@gmail.com \
--cc=hch@lst.de \
--cc=kbusch@kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=sagi@grimberg.me \
--cc=snitzer@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox