[PATCH v2] block: change rq_integrity_vec to respect the iterator
Jens Axboe
axboe at kernel.dk
Thu May 23 08:01:46 PDT 2024
On 5/23/24 8:58 AM, Mikulas Patocka wrote:
>
>
> On Wed, 15 May 2024, Jens Axboe wrote:
>
>> On 5/15/24 7:28 AM, Mikulas Patocka wrote:
>>> @@ -177,9 +177,9 @@ static inline int blk_integrity_rq(struc
>>> return 0;
>>> }
>>>
>>> -static inline struct bio_vec *rq_integrity_vec(struct request *rq)
>>> +static inline struct bio_vec rq_integrity_vec(struct request *rq)
>>> {
>>> - return NULL;
>>> + BUG();
>>> }
>>> #endif /* CONFIG_BLK_DEV_INTEGRITY */
>>> #endif /* _LINUX_BLK_INTEGRITY_H */
>>
>> Let's please not do that. If it's not used outside of
>> CONFIG_BLK_DEV_INTEGRITY, it should just go away.
>>
>> --
>> Jens Axboe
>
> 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.
> @@ -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)) {
?
> @@ -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?
--
Jens Axboe
More information about the Linux-nvme
mailing list