Skip to content

Commit 72e9cd9

Browse files
committed
Merge branch 'for-6.11/block' into for-next
* for-6.11/block: block: change rq_integrity_vec to respect the iterator
2 parents e6d1300 + cf546dd commit 72e9cd9

File tree

2 files changed

+10
-10
lines changed

2 files changed

+10
-10
lines changed

drivers/nvme/host/pci.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -826,9 +826,9 @@ static blk_status_t nvme_map_metadata(struct nvme_dev *dev, struct request *req,
826826
struct nvme_command *cmnd)
827827
{
828828
struct nvme_iod *iod = blk_mq_rq_to_pdu(req);
829+
struct bio_vec bv = rq_integrity_vec(req);
829830

830-
iod->meta_dma = dma_map_bvec(dev->dev, rq_integrity_vec(req),
831-
rq_dma_dir(req), 0);
831+
iod->meta_dma = dma_map_bvec(dev->dev, &bv, rq_dma_dir(req), 0);
832832
if (dma_mapping_error(dev->dev, iod->meta_dma))
833833
return BLK_STS_IOERR;
834834
cmnd->rw.metadata = cpu_to_le64(iod->meta_dma);
@@ -967,7 +967,7 @@ static __always_inline void nvme_pci_unmap_rq(struct request *req)
967967
struct nvme_iod *iod = blk_mq_rq_to_pdu(req);
968968

969969
dma_unmap_page(dev->dev, iod->meta_dma,
970-
rq_integrity_vec(req)->bv_len, rq_dma_dir(req));
970+
rq_integrity_vec(req).bv_len, rq_dma_dir(req));
971971
}
972972

973973
if (blk_rq_nr_phys_segments(req))

include/linux/blk-integrity.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -90,14 +90,13 @@ static inline bool blk_integrity_rq(struct request *rq)
9090
}
9191

9292
/*
93-
* Return the first bvec that contains integrity data. Only drivers that are
94-
* limited to a single integrity segment should use this helper.
93+
* Return the current bvec that contains the integrity data. bip_iter may be
94+
* advanced to iterate over the integrity data.
9595
*/
96-
static inline struct bio_vec *rq_integrity_vec(struct request *rq)
96+
static inline struct bio_vec rq_integrity_vec(struct request *rq)
9797
{
98-
if (WARN_ON_ONCE(queue_max_integrity_segments(rq->q) > 1))
99-
return NULL;
100-
return rq->bio->bi_integrity->bip_vec;
98+
return mp_bvec_iter_bvec(rq->bio->bi_integrity->bip_vec,
99+
rq->bio->bi_integrity->bip_iter);
101100
}
102101
#else /* CONFIG_BLK_DEV_INTEGRITY */
103102
static inline int blk_rq_count_integrity_sg(struct request_queue *q,
@@ -148,7 +147,8 @@ static inline int blk_integrity_rq(struct request *rq)
148147

149148
static inline struct bio_vec *rq_integrity_vec(struct request *rq)
150149
{
151-
return NULL;
150+
/* the optimizer will remove all calls to this function */
151+
return (struct bio_vec){ };
152152
}
153153
#endif /* CONFIG_BLK_DEV_INTEGRITY */
154154

0 commit comments

Comments
 (0)