linux-bcache.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* add a bvec_virt helper
@ 2021-08-04  9:56 Christoph Hellwig
  2021-08-04  9:56 ` [PATCH 01/15] bvec: " Christoph Hellwig
                   ` (16 more replies)
  0 siblings, 17 replies; 30+ messages in thread
From: Christoph Hellwig @ 2021-08-04  9:56 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Richard Weinberger, Anton Ivanov, Geoff Levand, Ilya Dryomov,
	Paolo Bonzini, Stefan Hajnoczi, Song Liu, Mike Snitzer, Coly Li,
	Stefan Haberland, Jan Hoeppner, Martin K. Petersen,
	Phillip Lougher, linux-block, dm-devel, linux-um, ceph-devel,
	virtualization, linux-raid, linux-bcache, linux-nvme, linux-s390,
	linux-scsi

Hi Jens,

this series adds a bvec_virt helper to return the virtual address of the
data in bvec to replace the open coded calculation, and as a reminder
that generall bio/bvec data can be in high memory unless it is caller
controller or in an architecture specific driver where highmem is
impossible.

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [PATCH 01/15] bvec: add a bvec_virt helper
  2021-08-04  9:56 add a bvec_virt helper Christoph Hellwig
@ 2021-08-04  9:56 ` Christoph Hellwig
  2021-08-05  6:19   ` Chaitanya Kulkarni
  2021-08-06  2:38   ` Martin K. Petersen
  2021-08-04  9:56 ` [PATCH 02/15] block: use bvec_virt in bio_integrity_{process,free} Christoph Hellwig
                   ` (15 subsequent siblings)
  16 siblings, 2 replies; 30+ messages in thread
From: Christoph Hellwig @ 2021-08-04  9:56 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Richard Weinberger, Anton Ivanov, Geoff Levand, Ilya Dryomov,
	Paolo Bonzini, Stefan Hajnoczi, Song Liu, Mike Snitzer, Coly Li,
	Stefan Haberland, Jan Hoeppner, Martin K. Petersen,
	Phillip Lougher, linux-block, dm-devel, linux-um, ceph-devel,
	virtualization, linux-raid, linux-bcache, linux-nvme, linux-s390,
	linux-scsi

Add a helper to get the virtual address for a bvec.  This avoids that
all callers need to know about the page + offset representation.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 include/linux/bvec.h | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/include/linux/bvec.h b/include/linux/bvec.h
index f9fa43b940ff..0e9bdd42dafb 100644
--- a/include/linux/bvec.h
+++ b/include/linux/bvec.h
@@ -229,4 +229,16 @@ static inline void memzero_bvec(struct bio_vec *bvec)
 	memzero_page(bvec->bv_page, bvec->bv_offset, bvec->bv_len);
 }
 
+/**
+ * bvec_virt - return the virtual address for a bvec
+ * @bvec: bvec to return the virtual address for
+ *
+ * Note: the caller must ensure that @bvec->bv_page is not a highmem page.
+ */
+static inline void *bvec_virt(struct bio_vec *bvec)
+{
+	WARN_ON_ONCE(PageHighMem(bvec->bv_page));
+	return page_address(bvec->bv_page) + bvec->bv_offset;
+}
+
 #endif /* __LINUX_BVEC_H */
-- 
2.30.2


^ permalink raw reply	[flat|nested] 30+ messages in thread

* [PATCH 02/15] block: use bvec_virt in bio_integrity_{process,free}
  2021-08-04  9:56 add a bvec_virt helper Christoph Hellwig
  2021-08-04  9:56 ` [PATCH 01/15] bvec: " Christoph Hellwig
@ 2021-08-04  9:56 ` Christoph Hellwig
  2021-08-05  6:19   ` Chaitanya Kulkarni
  2021-08-06  2:38   ` Martin K. Petersen
  2021-08-04  9:56 ` [PATCH 03/15] dm: make EBS depend on !HIGHMEM Christoph Hellwig
                   ` (14 subsequent siblings)
  16 siblings, 2 replies; 30+ messages in thread
From: Christoph Hellwig @ 2021-08-04  9:56 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Richard Weinberger, Anton Ivanov, Geoff Levand, Ilya Dryomov,
	Paolo Bonzini, Stefan Hajnoczi, Song Liu, Mike Snitzer, Coly Li,
	Stefan Haberland, Jan Hoeppner, Martin K. Petersen,
	Phillip Lougher, linux-block, dm-devel, linux-um, ceph-devel,
	virtualization, linux-raid, linux-bcache, linux-nvme, linux-s390,
	linux-scsi

Use the bvec_virt helper to clean up the bio integrity processing a
little bit.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 block/bio-integrity.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/block/bio-integrity.c b/block/bio-integrity.c
index 8f54d49dc500..6b47cddbbca1 100644
--- a/block/bio-integrity.c
+++ b/block/bio-integrity.c
@@ -104,8 +104,7 @@ void bio_integrity_free(struct bio *bio)
 	struct bio_set *bs = bio->bi_pool;
 
 	if (bip->bip_flags & BIP_BLOCK_INTEGRITY)
-		kfree(page_address(bip->bip_vec->bv_page) +
-		      bip->bip_vec->bv_offset);
+		kfree(bvec_virt(bip->bip_vec));
 
 	__bio_integrity_free(bs, bip);
 	bio->bi_integrity = NULL;
@@ -163,13 +162,11 @@ static blk_status_t bio_integrity_process(struct bio *bio,
 	struct bio_vec bv;
 	struct bio_integrity_payload *bip = bio_integrity(bio);
 	blk_status_t ret = BLK_STS_OK;
-	void *prot_buf = page_address(bip->bip_vec->bv_page) +
-		bip->bip_vec->bv_offset;
 
 	iter.disk_name = bio->bi_bdev->bd_disk->disk_name;
 	iter.interval = 1 << bi->interval_exp;
 	iter.seed = proc_iter->bi_sector;
-	iter.prot_buf = prot_buf;
+	iter.prot_buf = bvec_virt(bip->bip_vec);
 
 	__bio_for_each_segment(bv, bio, bviter, *proc_iter) {
 		void *kaddr = bvec_kmap_local(&bv);
-- 
2.30.2


^ permalink raw reply	[flat|nested] 30+ messages in thread

* [PATCH 03/15] dm: make EBS depend on !HIGHMEM
  2021-08-04  9:56 add a bvec_virt helper Christoph Hellwig
  2021-08-04  9:56 ` [PATCH 01/15] bvec: " Christoph Hellwig
  2021-08-04  9:56 ` [PATCH 02/15] block: use bvec_virt in bio_integrity_{process,free} Christoph Hellwig
@ 2021-08-04  9:56 ` Christoph Hellwig
  2021-08-04  9:56 ` [PATCH 04/15] dm-ebs: use bvec_virt Christoph Hellwig
                   ` (13 subsequent siblings)
  16 siblings, 0 replies; 30+ messages in thread
From: Christoph Hellwig @ 2021-08-04  9:56 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Richard Weinberger, Anton Ivanov, Geoff Levand, Ilya Dryomov,
	Paolo Bonzini, Stefan Hajnoczi, Song Liu, Mike Snitzer, Coly Li,
	Stefan Haberland, Jan Hoeppner, Martin K. Petersen,
	Phillip Lougher, linux-block, dm-devel, linux-um, ceph-devel,
	virtualization, linux-raid, linux-bcache, linux-nvme, linux-s390,
	linux-scsi

__ebs_rw_bvec use page_address on the submitted bios data, and thus
can't deal with highmem.  Disable the target on highmem configs.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 drivers/md/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/md/Kconfig b/drivers/md/Kconfig
index 0602e82a9516..ecc559c60d40 100644
--- a/drivers/md/Kconfig
+++ b/drivers/md/Kconfig
@@ -340,7 +340,7 @@ config DM_WRITECACHE
 
 config DM_EBS
 	tristate "Emulated block size target (EXPERIMENTAL)"
-	depends on BLK_DEV_DM
+	depends on BLK_DEV_DM && !HIGHMEM
 	select DM_BUFIO
 	help
 	  dm-ebs emulates smaller logical block size on backing devices
-- 
2.30.2


^ permalink raw reply	[flat|nested] 30+ messages in thread

* [PATCH 04/15] dm-ebs: use bvec_virt
  2021-08-04  9:56 add a bvec_virt helper Christoph Hellwig
                   ` (2 preceding siblings ...)
  2021-08-04  9:56 ` [PATCH 03/15] dm: make EBS depend on !HIGHMEM Christoph Hellwig
@ 2021-08-04  9:56 ` Christoph Hellwig
  2021-08-04  9:56 ` [PATCH 05/15] dm-integrity: " Christoph Hellwig
                   ` (12 subsequent siblings)
  16 siblings, 0 replies; 30+ messages in thread
From: Christoph Hellwig @ 2021-08-04  9:56 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Richard Weinberger, Anton Ivanov, Geoff Levand, Ilya Dryomov,
	Paolo Bonzini, Stefan Hajnoczi, Song Liu, Mike Snitzer, Coly Li,
	Stefan Haberland, Jan Hoeppner, Martin K. Petersen,
	Phillip Lougher, linux-block, dm-devel, linux-um, ceph-devel,
	virtualization, linux-raid, linux-bcache, linux-nvme, linux-s390,
	linux-scsi

Use bvec_virt instead of open coding it.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 drivers/md/dm-ebs-target.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/md/dm-ebs-target.c b/drivers/md/dm-ebs-target.c
index 71475a2410be..0c509dae0ff8 100644
--- a/drivers/md/dm-ebs-target.c
+++ b/drivers/md/dm-ebs-target.c
@@ -74,7 +74,7 @@ static int __ebs_rw_bvec(struct ebs_c *ec, int rw, struct bio_vec *bv, struct bv
 	if (unlikely(!bv->bv_page || !bv_len))
 		return -EIO;
 
-	pa = page_address(bv->bv_page) + bv->bv_offset;
+	pa = bvec_virt(bv);
 
 	/* Handle overlapping page <-> blocks */
 	while (bv_len) {
-- 
2.30.2


^ permalink raw reply	[flat|nested] 30+ messages in thread

* [PATCH 05/15] dm-integrity: use bvec_virt
  2021-08-04  9:56 add a bvec_virt helper Christoph Hellwig
                   ` (3 preceding siblings ...)
  2021-08-04  9:56 ` [PATCH 04/15] dm-ebs: use bvec_virt Christoph Hellwig
@ 2021-08-04  9:56 ` Christoph Hellwig
  2021-08-04  9:56 ` [PATCH 06/15] squashfs: " Christoph Hellwig
                   ` (11 subsequent siblings)
  16 siblings, 0 replies; 30+ messages in thread
From: Christoph Hellwig @ 2021-08-04  9:56 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Richard Weinberger, Anton Ivanov, Geoff Levand, Ilya Dryomov,
	Paolo Bonzini, Stefan Hajnoczi, Song Liu, Mike Snitzer, Coly Li,
	Stefan Haberland, Jan Hoeppner, Martin K. Petersen,
	Phillip Lougher, linux-block, dm-devel, linux-um, ceph-devel,
	virtualization, linux-raid, linux-bcache, linux-nvme, linux-s390,
	linux-scsi

Use bvec_virt instead of open coding it.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 drivers/md/dm-integrity.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/md/dm-integrity.c b/drivers/md/dm-integrity.c
index 20f2510db1f6..a9ea361769a7 100644
--- a/drivers/md/dm-integrity.c
+++ b/drivers/md/dm-integrity.c
@@ -1819,7 +1819,7 @@ static void integrity_metadata(struct work_struct *w)
 				unsigned this_len;
 
 				BUG_ON(PageHighMem(biv.bv_page));
-				tag = lowmem_page_address(biv.bv_page) + biv.bv_offset;
+				tag = bvec_virt(&biv);
 				this_len = min(biv.bv_len, data_to_process);
 				r = dm_integrity_rw_tag(ic, tag, &dio->metadata_block, &dio->metadata_offset,
 							this_len, dio->op == REQ_OP_READ ? TAG_READ : TAG_WRITE);
@@ -2006,7 +2006,7 @@ static bool __journal_read_write(struct dm_integrity_io *dio, struct bio *bio,
 					unsigned tag_now = min(biv.bv_len, tag_todo);
 					char *tag_addr;
 					BUG_ON(PageHighMem(biv.bv_page));
-					tag_addr = lowmem_page_address(biv.bv_page) + biv.bv_offset;
+					tag_addr = bvec_virt(&biv);
 					if (likely(dio->op == REQ_OP_WRITE))
 						memcpy(tag_ptr, tag_addr, tag_now);
 					else
-- 
2.30.2


^ permalink raw reply	[flat|nested] 30+ messages in thread

* [PATCH 06/15] squashfs: use bvec_virt
  2021-08-04  9:56 add a bvec_virt helper Christoph Hellwig
                   ` (4 preceding siblings ...)
  2021-08-04  9:56 ` [PATCH 05/15] dm-integrity: " Christoph Hellwig
@ 2021-08-04  9:56 ` Christoph Hellwig
  2021-08-04  9:56 ` [PATCH 07/15] rbd: " Christoph Hellwig
                   ` (10 subsequent siblings)
  16 siblings, 0 replies; 30+ messages in thread
From: Christoph Hellwig @ 2021-08-04  9:56 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Richard Weinberger, Anton Ivanov, Geoff Levand, Ilya Dryomov,
	Paolo Bonzini, Stefan Hajnoczi, Song Liu, Mike Snitzer, Coly Li,
	Stefan Haberland, Jan Hoeppner, Martin K. Petersen,
	Phillip Lougher, linux-block, dm-devel, linux-um, ceph-devel,
	virtualization, linux-raid, linux-bcache, linux-nvme, linux-s390,
	linux-scsi

Use bvec_virt instead of open coding it.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 fs/squashfs/block.c        | 7 +++----
 fs/squashfs/lz4_wrapper.c  | 2 +-
 fs/squashfs/lzo_wrapper.c  | 2 +-
 fs/squashfs/xz_wrapper.c   | 2 +-
 fs/squashfs/zlib_wrapper.c | 2 +-
 fs/squashfs/zstd_wrapper.c | 2 +-
 6 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/fs/squashfs/block.c b/fs/squashfs/block.c
index 855f0e87066d..2db8bcf7ff85 100644
--- a/fs/squashfs/block.c
+++ b/fs/squashfs/block.c
@@ -49,8 +49,7 @@ static int copy_bio_to_actor(struct bio *bio,
 
 		bytes_to_copy = min_t(int, bytes_to_copy,
 				      req_length - copied_bytes);
-		memcpy(actor_addr + actor_offset,
-		       page_address(bvec->bv_page) + bvec->bv_offset + offset,
+		memcpy(actor_addr + actor_offset, bvec_virt(bvec) + offset,
 		       bytes_to_copy);
 
 		actor_offset += bytes_to_copy;
@@ -177,7 +176,7 @@ int squashfs_read_data(struct super_block *sb, u64 index, int length,
 			goto out_free_bio;
 		}
 		/* Extract the length of the metadata block */
-		data = page_address(bvec->bv_page) + bvec->bv_offset;
+		data = bvec_virt(bvec);
 		length = data[offset];
 		if (offset < bvec->bv_len - 1) {
 			length |= data[offset + 1] << 8;
@@ -186,7 +185,7 @@ int squashfs_read_data(struct super_block *sb, u64 index, int length,
 				res = -EIO;
 				goto out_free_bio;
 			}
-			data = page_address(bvec->bv_page) + bvec->bv_offset;
+			data = bvec_virt(bvec);
 			length |= data[0] << 8;
 		}
 		bio_free_pages(bio);
diff --git a/fs/squashfs/lz4_wrapper.c b/fs/squashfs/lz4_wrapper.c
index 233d5582fbee..b685b6238316 100644
--- a/fs/squashfs/lz4_wrapper.c
+++ b/fs/squashfs/lz4_wrapper.c
@@ -101,7 +101,7 @@ static int lz4_uncompress(struct squashfs_sb_info *msblk, void *strm,
 	while (bio_next_segment(bio, &iter_all)) {
 		int avail = min(bytes, ((int)bvec->bv_len) - offset);
 
-		data = page_address(bvec->bv_page) + bvec->bv_offset;
+		data = bvec_virt(bvec);
 		memcpy(buff, data + offset, avail);
 		buff += avail;
 		bytes -= avail;
diff --git a/fs/squashfs/lzo_wrapper.c b/fs/squashfs/lzo_wrapper.c
index 97bb7d92ddcd..cb510a631968 100644
--- a/fs/squashfs/lzo_wrapper.c
+++ b/fs/squashfs/lzo_wrapper.c
@@ -76,7 +76,7 @@ static int lzo_uncompress(struct squashfs_sb_info *msblk, void *strm,
 	while (bio_next_segment(bio, &iter_all)) {
 		int avail = min(bytes, ((int)bvec->bv_len) - offset);
 
-		data = page_address(bvec->bv_page) + bvec->bv_offset;
+		data = bvec_virt(bvec);
 		memcpy(buff, data + offset, avail);
 		buff += avail;
 		bytes -= avail;
diff --git a/fs/squashfs/xz_wrapper.c b/fs/squashfs/xz_wrapper.c
index e80419aed862..68f6d09bb3a2 100644
--- a/fs/squashfs/xz_wrapper.c
+++ b/fs/squashfs/xz_wrapper.c
@@ -146,7 +146,7 @@ static int squashfs_xz_uncompress(struct squashfs_sb_info *msblk, void *strm,
 			}
 
 			avail = min(length, ((int)bvec->bv_len) - offset);
-			data = page_address(bvec->bv_page) + bvec->bv_offset;
+			data = bvec_virt(bvec);
 			length -= avail;
 			stream->buf.in = data + offset;
 			stream->buf.in_size = avail;
diff --git a/fs/squashfs/zlib_wrapper.c b/fs/squashfs/zlib_wrapper.c
index bcb881ec47f2..a20e9042146b 100644
--- a/fs/squashfs/zlib_wrapper.c
+++ b/fs/squashfs/zlib_wrapper.c
@@ -76,7 +76,7 @@ static int zlib_uncompress(struct squashfs_sb_info *msblk, void *strm,
 			}
 
 			avail = min(length, ((int)bvec->bv_len) - offset);
-			data = page_address(bvec->bv_page) + bvec->bv_offset;
+			data = bvec_virt(bvec);
 			length -= avail;
 			stream->next_in = data + offset;
 			stream->avail_in = avail;
diff --git a/fs/squashfs/zstd_wrapper.c b/fs/squashfs/zstd_wrapper.c
index b7cb1faa652d..0015cf8b5582 100644
--- a/fs/squashfs/zstd_wrapper.c
+++ b/fs/squashfs/zstd_wrapper.c
@@ -94,7 +94,7 @@ static int zstd_uncompress(struct squashfs_sb_info *msblk, void *strm,
 			}
 
 			avail = min(length, ((int)bvec->bv_len) - offset);
-			data = page_address(bvec->bv_page) + bvec->bv_offset;
+			data = bvec_virt(bvec);
 			length -= avail;
 			in_buf.src = data + offset;
 			in_buf.size = avail;
-- 
2.30.2


^ permalink raw reply	[flat|nested] 30+ messages in thread

* [PATCH 07/15] rbd: use bvec_virt
  2021-08-04  9:56 add a bvec_virt helper Christoph Hellwig
                   ` (5 preceding siblings ...)
  2021-08-04  9:56 ` [PATCH 06/15] squashfs: " Christoph Hellwig
@ 2021-08-04  9:56 ` Christoph Hellwig
  2021-08-05 12:01   ` Jeff Layton
  2021-08-04  9:56 ` [PATCH 08/15] virtio_blk: " Christoph Hellwig
                   ` (9 subsequent siblings)
  16 siblings, 1 reply; 30+ messages in thread
From: Christoph Hellwig @ 2021-08-04  9:56 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Richard Weinberger, Anton Ivanov, Geoff Levand, Ilya Dryomov,
	Paolo Bonzini, Stefan Hajnoczi, Song Liu, Mike Snitzer, Coly Li,
	Stefan Haberland, Jan Hoeppner, Martin K. Petersen,
	Phillip Lougher, linux-block, dm-devel, linux-um, ceph-devel,
	virtualization, linux-raid, linux-bcache, linux-nvme, linux-s390,
	linux-scsi

Use bvec_virt instead of open coding it.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 drivers/block/rbd.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index 6d596c2c2cd6..e65c9d706f6f 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -2986,8 +2986,7 @@ static bool is_zero_bvecs(struct bio_vec *bvecs, u32 bytes)
 	};
 
 	ceph_bvec_iter_advance_step(&it, bytes, ({
-		if (memchr_inv(page_address(bv.bv_page) + bv.bv_offset, 0,
-			       bv.bv_len))
+		if (memchr_inv(bvec_virt(&bv), 0, bv.bv_len))
 			return false;
 	}));
 	return true;
-- 
2.30.2


^ permalink raw reply	[flat|nested] 30+ messages in thread

* [PATCH 08/15] virtio_blk: use bvec_virt
  2021-08-04  9:56 add a bvec_virt helper Christoph Hellwig
                   ` (6 preceding siblings ...)
  2021-08-04  9:56 ` [PATCH 07/15] rbd: " Christoph Hellwig
@ 2021-08-04  9:56 ` Christoph Hellwig
  2021-08-05 14:17   ` Stefan Hajnoczi
  2021-08-04  9:56 ` [PATCH 09/15] bcache: " Christoph Hellwig
                   ` (8 subsequent siblings)
  16 siblings, 1 reply; 30+ messages in thread
From: Christoph Hellwig @ 2021-08-04  9:56 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Richard Weinberger, Anton Ivanov, Geoff Levand, Ilya Dryomov,
	Paolo Bonzini, Stefan Hajnoczi, Song Liu, Mike Snitzer, Coly Li,
	Stefan Haberland, Jan Hoeppner, Martin K. Petersen,
	Phillip Lougher, linux-block, dm-devel, linux-um, ceph-devel,
	virtualization, linux-raid, linux-bcache, linux-nvme, linux-s390,
	linux-scsi

Use bvec_virt instead of open coding it.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 drivers/block/virtio_blk.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
index 4b49df2dfd23..767b4f72a54d 100644
--- a/drivers/block/virtio_blk.c
+++ b/drivers/block/virtio_blk.c
@@ -166,11 +166,8 @@ static inline void virtblk_request_done(struct request *req)
 {
 	struct virtblk_req *vbr = blk_mq_rq_to_pdu(req);
 
-	if (req->rq_flags & RQF_SPECIAL_PAYLOAD) {
-		kfree(page_address(req->special_vec.bv_page) +
-		      req->special_vec.bv_offset);
-	}
-
+	if (req->rq_flags & RQF_SPECIAL_PAYLOAD)
+		kfree(bvec_virt(&req->special_vec));
 	blk_mq_end_request(req, virtblk_result(vbr));
 }
 
-- 
2.30.2


^ permalink raw reply	[flat|nested] 30+ messages in thread

* [PATCH 09/15] bcache: use bvec_virt
  2021-08-04  9:56 add a bvec_virt helper Christoph Hellwig
                   ` (7 preceding siblings ...)
  2021-08-04  9:56 ` [PATCH 08/15] virtio_blk: " Christoph Hellwig
@ 2021-08-04  9:56 ` Christoph Hellwig
  2021-08-04 17:05   ` Coly Li
  2021-08-04  9:56 ` [PATCH 10/15] sd: " Christoph Hellwig
                   ` (7 subsequent siblings)
  16 siblings, 1 reply; 30+ messages in thread
From: Christoph Hellwig @ 2021-08-04  9:56 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Richard Weinberger, Anton Ivanov, Geoff Levand, Ilya Dryomov,
	Paolo Bonzini, Stefan Hajnoczi, Song Liu, Mike Snitzer, Coly Li,
	Stefan Haberland, Jan Hoeppner, Martin K. Petersen,
	Phillip Lougher, linux-block, dm-devel, linux-um, ceph-devel,
	virtualization, linux-raid, linux-bcache, linux-nvme, linux-s390,
	linux-scsi

Use bvec_virt instead of open coding it.  Note that the existing code is
fine despite ignoring bv_offset as the bio is known to contain exactly
one page from the page allocator per bio_vec.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 drivers/md/bcache/btree.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c
index 183a58c89377..0595559de174 100644
--- a/drivers/md/bcache/btree.c
+++ b/drivers/md/bcache/btree.c
@@ -378,7 +378,7 @@ static void do_btree_node_write(struct btree *b)
 		struct bvec_iter_all iter_all;
 
 		bio_for_each_segment_all(bv, b->bio, iter_all) {
-			memcpy(page_address(bv->bv_page), addr, PAGE_SIZE);
+			memcpy(bvec_virt(bv), addr, PAGE_SIZE);
 			addr += PAGE_SIZE;
 		}
 
-- 
2.30.2


^ permalink raw reply	[flat|nested] 30+ messages in thread

* [PATCH 10/15] sd: use bvec_virt
  2021-08-04  9:56 add a bvec_virt helper Christoph Hellwig
                   ` (8 preceding siblings ...)
  2021-08-04  9:56 ` [PATCH 09/15] bcache: " Christoph Hellwig
@ 2021-08-04  9:56 ` Christoph Hellwig
  2021-08-05 16:31   ` [dm-devel] " Bart Van Assche
  2021-08-06  2:43   ` Martin K. Petersen
  2021-08-04  9:56 ` [PATCH 11/15] ubd: " Christoph Hellwig
                   ` (6 subsequent siblings)
  16 siblings, 2 replies; 30+ messages in thread
From: Christoph Hellwig @ 2021-08-04  9:56 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Richard Weinberger, Anton Ivanov, Geoff Levand, Ilya Dryomov,
	Paolo Bonzini, Stefan Hajnoczi, Song Liu, Mike Snitzer, Coly Li,
	Stefan Haberland, Jan Hoeppner, Martin K. Petersen,
	Phillip Lougher, linux-block, dm-devel, linux-um, ceph-devel,
	virtualization, linux-raid, linux-bcache, linux-nvme, linux-s390,
	linux-scsi

Use bvec_virt instead of open coding it.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 drivers/scsi/sd.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index b8d55af763f9..5b5b8266e142 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -886,7 +886,7 @@ static blk_status_t sd_setup_unmap_cmnd(struct scsi_cmnd *cmd)
 	cmd->cmnd[0] = UNMAP;
 	cmd->cmnd[8] = 24;
 
-	buf = page_address(rq->special_vec.bv_page);
+	buf = bvec_virt(&rq->special_vec);
 	put_unaligned_be16(6 + 16, &buf[0]);
 	put_unaligned_be16(16, &buf[2]);
 	put_unaligned_be64(lba, &buf[8]);
-- 
2.30.2


^ permalink raw reply	[flat|nested] 30+ messages in thread

* [PATCH 11/15] ubd: use bvec_virt
  2021-08-04  9:56 add a bvec_virt helper Christoph Hellwig
                   ` (9 preceding siblings ...)
  2021-08-04  9:56 ` [PATCH 10/15] sd: " Christoph Hellwig
@ 2021-08-04  9:56 ` Christoph Hellwig
  2021-08-04 10:10   ` Anton Ivanov
  2021-08-04  9:56 ` [PATCH 12/15] ps3vram: " Christoph Hellwig
                   ` (5 subsequent siblings)
  16 siblings, 1 reply; 30+ messages in thread
From: Christoph Hellwig @ 2021-08-04  9:56 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Richard Weinberger, Anton Ivanov, Geoff Levand, Ilya Dryomov,
	Paolo Bonzini, Stefan Hajnoczi, Song Liu, Mike Snitzer, Coly Li,
	Stefan Haberland, Jan Hoeppner, Martin K. Petersen,
	Phillip Lougher, linux-block, dm-devel, linux-um, ceph-devel,
	virtualization, linux-raid, linux-bcache, linux-nvme, linux-s390,
	linux-scsi

Use bvec_virt instead of open coding it.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 arch/um/drivers/ubd_kern.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c
index e497185dd393..cd9dc0556e91 100644
--- a/arch/um/drivers/ubd_kern.c
+++ b/arch/um/drivers/ubd_kern.c
@@ -1268,8 +1268,7 @@ static void ubd_map_req(struct ubd *dev, struct io_thread_req *io_req,
 		rq_for_each_segment(bvec, req, iter) {
 			BUG_ON(i >= io_req->desc_cnt);
 
-			io_req->io_desc[i].buffer =
-				page_address(bvec.bv_page) + bvec.bv_offset;
+			io_req->io_desc[i].buffer = bvec_virt(&bvec);
 			io_req->io_desc[i].length = bvec.bv_len;
 			i++;
 		}
-- 
2.30.2


^ permalink raw reply	[flat|nested] 30+ messages in thread

* [PATCH 12/15] ps3vram: use bvec_virt
  2021-08-04  9:56 add a bvec_virt helper Christoph Hellwig
                   ` (10 preceding siblings ...)
  2021-08-04  9:56 ` [PATCH 11/15] ubd: " Christoph Hellwig
@ 2021-08-04  9:56 ` Christoph Hellwig
  2021-08-04  9:56 ` [PATCH 13/15] dasd: " Christoph Hellwig
                   ` (4 subsequent siblings)
  16 siblings, 0 replies; 30+ messages in thread
From: Christoph Hellwig @ 2021-08-04  9:56 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Richard Weinberger, Anton Ivanov, Geoff Levand, Ilya Dryomov,
	Paolo Bonzini, Stefan Hajnoczi, Song Liu, Mike Snitzer, Coly Li,
	Stefan Haberland, Jan Hoeppner, Martin K. Petersen,
	Phillip Lougher, linux-block, dm-devel, linux-um, ceph-devel,
	virtualization, linux-raid, linux-bcache, linux-nvme, linux-s390,
	linux-scsi

Use bvec_virt instead of open coding it.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 drivers/block/ps3vram.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/block/ps3vram.c b/drivers/block/ps3vram.c
index 7fbf469651c4..c7b19e128b03 100644
--- a/drivers/block/ps3vram.c
+++ b/drivers/block/ps3vram.c
@@ -541,7 +541,7 @@ static struct bio *ps3vram_do_bio(struct ps3_system_bus_device *dev,
 
 	bio_for_each_segment(bvec, bio, iter) {
 		/* PS3 is ppc64, so we don't handle highmem */
-		char *ptr = page_address(bvec.bv_page) + bvec.bv_offset;
+		char *ptr = bvec_virt(&bvec);
 		size_t len = bvec.bv_len, retlen;
 
 		dev_dbg(&dev->core, "    %s %zu bytes at offset %llu\n", op,
-- 
2.30.2


^ permalink raw reply	[flat|nested] 30+ messages in thread

* [PATCH 13/15] dasd: use bvec_virt
  2021-08-04  9:56 add a bvec_virt helper Christoph Hellwig
                   ` (11 preceding siblings ...)
  2021-08-04  9:56 ` [PATCH 12/15] ps3vram: " Christoph Hellwig
@ 2021-08-04  9:56 ` Christoph Hellwig
  2021-08-04 20:20   ` Stefan Haberland
  2021-08-04  9:56 ` [PATCH 14/15] dcssblk: " Christoph Hellwig
                   ` (3 subsequent siblings)
  16 siblings, 1 reply; 30+ messages in thread
From: Christoph Hellwig @ 2021-08-04  9:56 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Richard Weinberger, Anton Ivanov, Geoff Levand, Ilya Dryomov,
	Paolo Bonzini, Stefan Hajnoczi, Song Liu, Mike Snitzer, Coly Li,
	Stefan Haberland, Jan Hoeppner, Martin K. Petersen,
	Phillip Lougher, linux-block, dm-devel, linux-um, ceph-devel,
	virtualization, linux-raid, linux-bcache, linux-nvme, linux-s390,
	linux-scsi

Use bvec_virt instead of open coding it.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 drivers/s390/block/dasd_diag.c |  2 +-
 drivers/s390/block/dasd_eckd.c | 14 +++++++-------
 drivers/s390/block/dasd_fba.c  |  4 ++--
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/drivers/s390/block/dasd_diag.c b/drivers/s390/block/dasd_diag.c
index 6bb775236c16..db5987281010 100644
--- a/drivers/s390/block/dasd_diag.c
+++ b/drivers/s390/block/dasd_diag.c
@@ -552,7 +552,7 @@ static struct dasd_ccw_req *dasd_diag_build_cp(struct dasd_device *memdev,
 	dbio = dreq->bio;
 	recid = first_rec;
 	rq_for_each_segment(bv, req, iter) {
-		dst = page_address(bv.bv_page) + bv.bv_offset;
+		dst = bvec_virt(&bv);
 		for (off = 0; off < bv.bv_len; off += blksize) {
 			memset(dbio, 0, sizeof (struct dasd_diag_bio));
 			dbio->type = rw_cmd;
diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c
index 0de1a463c509..8610ea414322 100644
--- a/drivers/s390/block/dasd_eckd.c
+++ b/drivers/s390/block/dasd_eckd.c
@@ -3267,7 +3267,7 @@ static int dasd_eckd_ese_read(struct dasd_ccw_req *cqr, struct irb *irb)
 	end_blk = (curr_trk + 1) * recs_per_trk;
 
 	rq_for_each_segment(bv, req, iter) {
-		dst = page_address(bv.bv_page) + bv.bv_offset;
+		dst = bvec_virt(&bv);
 		for (off = 0; off < bv.bv_len; off += blksize) {
 			if (first_blk + blk_count >= end_blk) {
 				cqr->proc_bytes = blk_count * blksize;
@@ -3999,7 +3999,7 @@ static struct dasd_ccw_req *dasd_eckd_build_cp_cmd_single(
 			      last_rec - recid + 1, cmd, basedev, blksize);
 	}
 	rq_for_each_segment(bv, req, iter) {
-		dst = page_address(bv.bv_page) + bv.bv_offset;
+		dst = bvec_virt(&bv);
 		if (dasd_page_cache) {
 			char *copy = kmem_cache_alloc(dasd_page_cache,
 						      GFP_DMA | __GFP_NOWARN);
@@ -4166,7 +4166,7 @@ static struct dasd_ccw_req *dasd_eckd_build_cp_cmd_track(
 	idaw_dst = NULL;
 	idaw_len = 0;
 	rq_for_each_segment(bv, req, iter) {
-		dst = page_address(bv.bv_page) + bv.bv_offset;
+		dst = bvec_virt(&bv);
 		seg_len = bv.bv_len;
 		while (seg_len) {
 			if (new_track) {
@@ -4509,7 +4509,7 @@ static struct dasd_ccw_req *dasd_eckd_build_cp_tpm_track(
 		new_track = 1;
 		recid = first_rec;
 		rq_for_each_segment(bv, req, iter) {
-			dst = page_address(bv.bv_page) + bv.bv_offset;
+			dst = bvec_virt(&bv);
 			seg_len = bv.bv_len;
 			while (seg_len) {
 				if (new_track) {
@@ -4542,7 +4542,7 @@ static struct dasd_ccw_req *dasd_eckd_build_cp_tpm_track(
 		}
 	} else {
 		rq_for_each_segment(bv, req, iter) {
-			dst = page_address(bv.bv_page) + bv.bv_offset;
+			dst = bvec_virt(&bv);
 			last_tidaw = itcw_add_tidaw(itcw, 0x00,
 						    dst, bv.bv_len);
 			if (IS_ERR(last_tidaw)) {
@@ -4778,7 +4778,7 @@ static struct dasd_ccw_req *dasd_eckd_build_cp_raw(struct dasd_device *startdev,
 			idaws = idal_create_words(idaws, rawpadpage, PAGE_SIZE);
 	}
 	rq_for_each_segment(bv, req, iter) {
-		dst = page_address(bv.bv_page) + bv.bv_offset;
+		dst = bvec_virt(&bv);
 		seg_len = bv.bv_len;
 		if (cmd == DASD_ECKD_CCW_READ_TRACK)
 			memset(dst, 0, seg_len);
@@ -4839,7 +4839,7 @@ dasd_eckd_free_cp(struct dasd_ccw_req *cqr, struct request *req)
 	if (private->uses_cdl == 0 || recid > 2*blk_per_trk)
 		ccw++;
 	rq_for_each_segment(bv, req, iter) {
-		dst = page_address(bv.bv_page) + bv.bv_offset;
+		dst = bvec_virt(&bv);
 		for (off = 0; off < bv.bv_len; off += blksize) {
 			/* Skip locate record. */
 			if (private->uses_cdl && recid <= 2*blk_per_trk)
diff --git a/drivers/s390/block/dasd_fba.c b/drivers/s390/block/dasd_fba.c
index 3ad319aee51e..e084f4dedddd 100644
--- a/drivers/s390/block/dasd_fba.c
+++ b/drivers/s390/block/dasd_fba.c
@@ -501,7 +501,7 @@ static struct dasd_ccw_req *dasd_fba_build_cp_regular(
 	}
 	recid = first_rec;
 	rq_for_each_segment(bv, req, iter) {
-		dst = page_address(bv.bv_page) + bv.bv_offset;
+		dst = bvec_virt(&bv);
 		if (dasd_page_cache) {
 			char *copy = kmem_cache_alloc(dasd_page_cache,
 						      GFP_DMA | __GFP_NOWARN);
@@ -583,7 +583,7 @@ dasd_fba_free_cp(struct dasd_ccw_req *cqr, struct request *req)
 	if (private->rdc_data.mode.bits.data_chain != 0)
 		ccw++;
 	rq_for_each_segment(bv, req, iter) {
-		dst = page_address(bv.bv_page) + bv.bv_offset;
+		dst = bvec_virt(&bv);
 		for (off = 0; off < bv.bv_len; off += blksize) {
 			/* Skip locate record. */
 			if (private->rdc_data.mode.bits.data_chain == 0)
-- 
2.30.2


^ permalink raw reply	[flat|nested] 30+ messages in thread

* [PATCH 14/15] dcssblk: use bvec_virt
  2021-08-04  9:56 add a bvec_virt helper Christoph Hellwig
                   ` (12 preceding siblings ...)
  2021-08-04  9:56 ` [PATCH 13/15] dasd: " Christoph Hellwig
@ 2021-08-04  9:56 ` Christoph Hellwig
  2021-08-04  9:56 ` [PATCH 15/15] nvme: " Christoph Hellwig
                   ` (2 subsequent siblings)
  16 siblings, 0 replies; 30+ messages in thread
From: Christoph Hellwig @ 2021-08-04  9:56 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Richard Weinberger, Anton Ivanov, Geoff Levand, Ilya Dryomov,
	Paolo Bonzini, Stefan Hajnoczi, Song Liu, Mike Snitzer, Coly Li,
	Stefan Haberland, Jan Hoeppner, Martin K. Petersen,
	Phillip Lougher, linux-block, dm-devel, linux-um, ceph-devel,
	virtualization, linux-raid, linux-bcache, linux-nvme, linux-s390,
	linux-scsi

Use bvec_virt instead of open coding it.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 drivers/s390/block/dcssblk.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/s390/block/dcssblk.c b/drivers/s390/block/dcssblk.c
index 29180bdf0977..5be3d1c39a78 100644
--- a/drivers/s390/block/dcssblk.c
+++ b/drivers/s390/block/dcssblk.c
@@ -892,8 +892,7 @@ dcssblk_submit_bio(struct bio *bio)
 
 	index = (bio->bi_iter.bi_sector >> 3);
 	bio_for_each_segment(bvec, bio, iter) {
-		page_addr = (unsigned long)
-			page_address(bvec.bv_page) + bvec.bv_offset;
+		page_addr = (unsigned long)bvec_virt(&bvec);
 		source_addr = dev_info->start + (index<<12) + bytes_done;
 		if (unlikely((page_addr & 4095) != 0) || (bvec.bv_len & 4095) != 0)
 			// More paranoia.
-- 
2.30.2


^ permalink raw reply	[flat|nested] 30+ messages in thread

* [PATCH 15/15] nvme: use bvec_virt
  2021-08-04  9:56 add a bvec_virt helper Christoph Hellwig
                   ` (13 preceding siblings ...)
  2021-08-04  9:56 ` [PATCH 14/15] dcssblk: " Christoph Hellwig
@ 2021-08-04  9:56 ` Christoph Hellwig
  2021-08-04 14:33   ` Keith Busch
  2021-08-16 12:38 ` add a bvec_virt helper Christoph Hellwig
  2021-08-16 16:51 ` Jens Axboe
  16 siblings, 1 reply; 30+ messages in thread
From: Christoph Hellwig @ 2021-08-04  9:56 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Richard Weinberger, Anton Ivanov, Geoff Levand, Ilya Dryomov,
	Paolo Bonzini, Stefan Hajnoczi, Song Liu, Mike Snitzer, Coly Li,
	Stefan Haberland, Jan Hoeppner, Martin K. Petersen,
	Phillip Lougher, linux-block, dm-devel, linux-um, ceph-devel,
	virtualization, linux-raid, linux-bcache, linux-nvme, linux-s390,
	linux-scsi

Use bvec_virt instead of open coding it.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 drivers/nvme/host/core.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index dfd9dec0c1f6..02ce94b2906b 100644
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -968,12 +968,11 @@ void nvme_cleanup_cmd(struct request *req)
 {
 	if (req->rq_flags & RQF_SPECIAL_PAYLOAD) {
 		struct nvme_ctrl *ctrl = nvme_req(req)->ctrl;
-		struct page *page = req->special_vec.bv_page;
 
-		if (page == ctrl->discard_page)
+		if (req->special_vec.bv_page == ctrl->discard_page)
 			clear_bit_unlock(0, &ctrl->discard_page_busy);
 		else
-			kfree(page_address(page) + req->special_vec.bv_offset);
+			kfree(bvec_virt(&req->special_vec));
 	}
 }
 EXPORT_SYMBOL_GPL(nvme_cleanup_cmd);
-- 
2.30.2


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH 11/15] ubd: use bvec_virt
  2021-08-04  9:56 ` [PATCH 11/15] ubd: " Christoph Hellwig
@ 2021-08-04 10:10   ` Anton Ivanov
  0 siblings, 0 replies; 30+ messages in thread
From: Anton Ivanov @ 2021-08-04 10:10 UTC (permalink / raw)
  To: Christoph Hellwig, Jens Axboe
  Cc: Richard Weinberger, Geoff Levand, Ilya Dryomov, Paolo Bonzini,
	Stefan Hajnoczi, Song Liu, Mike Snitzer, Coly Li,
	Stefan Haberland, Jan Hoeppner, Martin K. Petersen,
	Phillip Lougher, linux-block, dm-devel, linux-um, ceph-devel,
	virtualization, linux-raid, linux-bcache, linux-nvme, linux-s390,
	linux-scsi



On 04/08/2021 10:56, Christoph Hellwig wrote:
> Use bvec_virt instead of open coding it.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
>   arch/um/drivers/ubd_kern.c | 3 +--
>   1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c
> index e497185dd393..cd9dc0556e91 100644
> --- a/arch/um/drivers/ubd_kern.c
> +++ b/arch/um/drivers/ubd_kern.c
> @@ -1268,8 +1268,7 @@ static void ubd_map_req(struct ubd *dev, struct io_thread_req *io_req,
>   		rq_for_each_segment(bvec, req, iter) {
>   			BUG_ON(i >= io_req->desc_cnt);
>   
> -			io_req->io_desc[i].buffer =
> -				page_address(bvec.bv_page) + bvec.bv_offset;
> +			io_req->io_desc[i].buffer = bvec_virt(&bvec);
>   			io_req->io_desc[i].length = bvec.bv_len;
>   			i++;
>   		}
> 
Acked-By: Anton Ivanov <anton.ivanov@cambridgegreys.com>

-- 
Anton R. Ivanov
Cambridgegreys Limited. Registered in England. Company Number 10273661
https://www.cambridgegreys.com/

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH 15/15] nvme: use bvec_virt
  2021-08-04  9:56 ` [PATCH 15/15] nvme: " Christoph Hellwig
@ 2021-08-04 14:33   ` Keith Busch
  0 siblings, 0 replies; 30+ messages in thread
From: Keith Busch @ 2021-08-04 14:33 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: Jens Axboe, Richard Weinberger, Anton Ivanov, Geoff Levand,
	Ilya Dryomov, Paolo Bonzini, Stefan Hajnoczi, Song Liu,
	Mike Snitzer, Coly Li, Stefan Haberland, Jan Hoeppner,
	Martin K. Petersen, Phillip Lougher, linux-block, dm-devel,
	linux-um, ceph-devel, virtualization, linux-raid, linux-bcache,
	linux-nvme, linux-s390, linux-scsi

On Wed, Aug 04, 2021 at 11:56:34AM +0200, Christoph Hellwig wrote:
> Use bvec_virt instead of open coding it.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
>  drivers/nvme/host/core.c | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
> index dfd9dec0c1f6..02ce94b2906b 100644
> --- a/drivers/nvme/host/core.c
> +++ b/drivers/nvme/host/core.c
> @@ -968,12 +968,11 @@ void nvme_cleanup_cmd(struct request *req)
>  {
>  	if (req->rq_flags & RQF_SPECIAL_PAYLOAD) {
>  		struct nvme_ctrl *ctrl = nvme_req(req)->ctrl;
> -		struct page *page = req->special_vec.bv_page;
>  
> -		if (page == ctrl->discard_page)
> +		if (req->special_vec.bv_page == ctrl->discard_page)
>  			clear_bit_unlock(0, &ctrl->discard_page_busy);
>  		else
> -			kfree(page_address(page) + req->special_vec.bv_offset);
> +			kfree(bvec_virt(&req->special_vec));
>  	}
>  }
>  EXPORT_SYMBOL_GPL(nvme_cleanup_cmd);

Looks good.

Reviewed-by: Keith Busch <kbusch@kernel.org>

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH 09/15] bcache: use bvec_virt
  2021-08-04  9:56 ` [PATCH 09/15] bcache: " Christoph Hellwig
@ 2021-08-04 17:05   ` Coly Li
  0 siblings, 0 replies; 30+ messages in thread
From: Coly Li @ 2021-08-04 17:05 UTC (permalink / raw)
  To: Christoph Hellwig, Jens Axboe
  Cc: Richard Weinberger, Anton Ivanov, Geoff Levand, Ilya Dryomov,
	Paolo Bonzini, Stefan Hajnoczi, Song Liu, Mike Snitzer,
	Stefan Haberland, Jan Hoeppner, Martin K. Petersen,
	Phillip Lougher, linux-block, dm-devel, linux-um, ceph-devel,
	virtualization, linux-raid, linux-bcache, linux-nvme, linux-s390,
	linux-scsi

On 8/4/21 5:56 PM, Christoph Hellwig wrote:
> Use bvec_virt instead of open coding it.  Note that the existing code is
> fine despite ignoring bv_offset as the bio is known to contain exactly
> one page from the page allocator per bio_vec.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>

Looks good to me.

Reviewed-by: Coly Li <colyli@suse.de>

Thanks.

Coly Li

> ---
>  drivers/md/bcache/btree.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c
> index 183a58c89377..0595559de174 100644
> --- a/drivers/md/bcache/btree.c
> +++ b/drivers/md/bcache/btree.c
> @@ -378,7 +378,7 @@ static void do_btree_node_write(struct btree *b)
>  		struct bvec_iter_all iter_all;
>  
>  		bio_for_each_segment_all(bv, b->bio, iter_all) {
> -			memcpy(page_address(bv->bv_page), addr, PAGE_SIZE);
> +			memcpy(bvec_virt(bv), addr, PAGE_SIZE);
>  			addr += PAGE_SIZE;
>  		}
>  


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH 13/15] dasd: use bvec_virt
  2021-08-04  9:56 ` [PATCH 13/15] dasd: " Christoph Hellwig
@ 2021-08-04 20:20   ` Stefan Haberland
  0 siblings, 0 replies; 30+ messages in thread
From: Stefan Haberland @ 2021-08-04 20:20 UTC (permalink / raw)
  To: Christoph Hellwig, Jens Axboe
  Cc: Richard Weinberger, Anton Ivanov, Geoff Levand, Ilya Dryomov,
	Paolo Bonzini, Stefan Hajnoczi, Song Liu, Mike Snitzer, Coly Li,
	Jan Hoeppner, Martin K. Petersen, Phillip Lougher, linux-block,
	dm-devel, linux-um, ceph-devel, virtualization, linux-raid,
	linux-bcache, linux-nvme, linux-s390, linux-scsi

Am 04.08.21 um 11:56 schrieb Christoph Hellwig:
> Use bvec_virt instead of open coding it.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>

Looks good.

Reviewed-by: Stefan Haberland <sth@linux.ibm.com>



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH 01/15] bvec: add a bvec_virt helper
  2021-08-04  9:56 ` [PATCH 01/15] bvec: " Christoph Hellwig
@ 2021-08-05  6:19   ` Chaitanya Kulkarni
  2021-08-06  2:38   ` Martin K. Petersen
  1 sibling, 0 replies; 30+ messages in thread
From: Chaitanya Kulkarni @ 2021-08-05  6:19 UTC (permalink / raw)
  To: Christoph Hellwig, Jens Axboe
  Cc: Richard Weinberger, Anton Ivanov, Geoff Levand, Ilya Dryomov,
	Paolo Bonzini, Stefan Hajnoczi, Song Liu, Mike Snitzer, Coly Li,
	Stefan Haberland, Jan Hoeppner, Martin K. Petersen,
	Phillip Lougher, linux-block, dm-devel, linux-um, ceph-devel,
	virtualization, linux-raid, linux-bcache, linux-nvme, linux-s390,
	linux-scsi



On 8/4/2021 2:56 AM, Christoph Hellwig wrote:
> Add a helper to get the virtual address for a bvec.  This avoids that
> all callers need to know about the page + offset representation.
> 
> Signed-off-by: Christoph Hellwig<hch@lst.de>

Looks good.

Reviewed-by: Chaitanya Kulkarni <kch@kernel.org>

-- 
-ck

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH 02/15] block: use bvec_virt in bio_integrity_{process,free}
  2021-08-04  9:56 ` [PATCH 02/15] block: use bvec_virt in bio_integrity_{process,free} Christoph Hellwig
@ 2021-08-05  6:19   ` Chaitanya Kulkarni
  2021-08-06  2:38   ` Martin K. Petersen
  1 sibling, 0 replies; 30+ messages in thread
From: Chaitanya Kulkarni @ 2021-08-05  6:19 UTC (permalink / raw)
  To: Christoph Hellwig, Jens Axboe
  Cc: Richard Weinberger, Anton Ivanov, Geoff Levand, Ilya Dryomov,
	Paolo Bonzini, Stefan Hajnoczi, Song Liu, Mike Snitzer, Coly Li,
	Stefan Haberland, Jan Hoeppner, Martin K. Petersen,
	Phillip Lougher, linux-block, dm-devel, linux-um, ceph-devel,
	virtualization, linux-raid, linux-bcache, linux-nvme, linux-s390,
	linux-scsi



On 8/4/2021 2:56 AM, Christoph Hellwig wrote:
> Use the bvec_virt helper to clean up the bio integrity processing a
> little bit.
> 
> Signed-off-by: Christoph Hellwig<hch@lst.de>

Looks good.

Reviewed-by: Chaitanya Kulkarni <kch@kernel.org>

-- 
-ck

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH 07/15] rbd: use bvec_virt
  2021-08-04  9:56 ` [PATCH 07/15] rbd: " Christoph Hellwig
@ 2021-08-05 12:01   ` Jeff Layton
  0 siblings, 0 replies; 30+ messages in thread
From: Jeff Layton @ 2021-08-05 12:01 UTC (permalink / raw)
  To: Christoph Hellwig, Jens Axboe
  Cc: Richard Weinberger, Anton Ivanov, Geoff Levand, Ilya Dryomov,
	Paolo Bonzini, Stefan Hajnoczi, Song Liu, Mike Snitzer, Coly Li,
	Stefan Haberland, Jan Hoeppner, Martin K. Petersen,
	Phillip Lougher, linux-block, dm-devel, linux-um, ceph-devel,
	virtualization, linux-raid, linux-bcache, linux-nvme, linux-s390,
	linux-scsi

On Wed, 2021-08-04 at 11:56 +0200, Christoph Hellwig wrote:
> Use bvec_virt instead of open coding it.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
>  drivers/block/rbd.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
> index 6d596c2c2cd6..e65c9d706f6f 100644
> --- a/drivers/block/rbd.c
> +++ b/drivers/block/rbd.c
> @@ -2986,8 +2986,7 @@ static bool is_zero_bvecs(struct bio_vec *bvecs, u32 bytes)
>  	};
>  
>  	ceph_bvec_iter_advance_step(&it, bytes, ({
> -		if (memchr_inv(page_address(bv.bv_page) + bv.bv_offset, 0,
> -			       bv.bv_len))
> +		if (memchr_inv(bvec_virt(&bv), 0, bv.bv_len))
>  			return false;
>  	}));
>  	return true;

LGTM

Reviewed-by: Jeff Layton <jlayton@kernel.org>


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH 08/15] virtio_blk: use bvec_virt
  2021-08-04  9:56 ` [PATCH 08/15] virtio_blk: " Christoph Hellwig
@ 2021-08-05 14:17   ` Stefan Hajnoczi
  0 siblings, 0 replies; 30+ messages in thread
From: Stefan Hajnoczi @ 2021-08-05 14:17 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: Jens Axboe, Richard Weinberger, Anton Ivanov, Geoff Levand,
	Ilya Dryomov, Paolo Bonzini, Song Liu, Mike Snitzer, Coly Li,
	Stefan Haberland, Jan Hoeppner, Martin K. Petersen,
	Phillip Lougher, linux-block, dm-devel, linux-um, ceph-devel,
	virtualization, linux-raid, linux-bcache, linux-nvme, linux-s390,
	linux-scsi

[-- Attachment #1: Type: text/plain, Size: 321 bytes --]

On Wed, Aug 04, 2021 at 11:56:27AM +0200, Christoph Hellwig wrote:
> Use bvec_virt instead of open coding it.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
>  drivers/block/virtio_blk.c | 7 ++-----
>  1 file changed, 2 insertions(+), 5 deletions(-)

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [dm-devel] [PATCH 10/15] sd: use bvec_virt
  2021-08-04  9:56 ` [PATCH 10/15] sd: " Christoph Hellwig
@ 2021-08-05 16:31   ` Bart Van Assche
  2021-08-06  2:43   ` Martin K. Petersen
  1 sibling, 0 replies; 30+ messages in thread
From: Bart Van Assche @ 2021-08-05 16:31 UTC (permalink / raw)
  To: Christoph Hellwig, Jens Axboe
  Cc: Jan Hoeppner, Mike Snitzer, linux-nvme, virtualization, Song Liu,
	dm-devel, Anton Ivanov, linux-s390, linux-scsi,
	Richard Weinberger, Ilya Dryomov, linux-um, Coly Li, linux-raid,
	linux-bcache, Stefan Haberland, Stefan Hajnoczi, Paolo Bonzini,
	ceph-devel, linux-block, Martin K. Petersen, Geoff Levand,
	Phillip Lougher

On 8/4/21 2:56 AM, Christoph Hellwig wrote:
> Use bvec_virt instead of open coding it.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
>   drivers/scsi/sd.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
> index b8d55af763f9..5b5b8266e142 100644
> --- a/drivers/scsi/sd.c
> +++ b/drivers/scsi/sd.c
> @@ -886,7 +886,7 @@ static blk_status_t sd_setup_unmap_cmnd(struct scsi_cmnd *cmd)
>   	cmd->cmnd[0] = UNMAP;
>   	cmd->cmnd[8] = 24;
>   
> -	buf = page_address(rq->special_vec.bv_page);
> +	buf = bvec_virt(&rq->special_vec);
>   	put_unaligned_be16(6 + 16, &buf[0]);
>   	put_unaligned_be16(16, &buf[2]);
>   	put_unaligned_be64(lba, &buf[8]);

The patch description is not correct. The above patch involves a 
functional change while the patch description suggests that no 
functionality has been changed.

Although the above patch looks fine to me, why has page_address() been 
changed into bvec_virt() in the sd driver? My understanding is that the 
sd driver always sets bv_offset to zero.

Thanks,

Bart.



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH 01/15] bvec: add a bvec_virt helper
  2021-08-04  9:56 ` [PATCH 01/15] bvec: " Christoph Hellwig
  2021-08-05  6:19   ` Chaitanya Kulkarni
@ 2021-08-06  2:38   ` Martin K. Petersen
  1 sibling, 0 replies; 30+ messages in thread
From: Martin K. Petersen @ 2021-08-06  2:38 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: Jens Axboe, Richard Weinberger, Anton Ivanov, Geoff Levand,
	Ilya Dryomov, Paolo Bonzini, Stefan Hajnoczi, Song Liu,
	Mike Snitzer, Coly Li, Stefan Haberland, Jan Hoeppner,
	Martin K. Petersen, Phillip Lougher, linux-block, dm-devel,
	linux-um, ceph-devel, virtualization, linux-raid, linux-bcache,
	linux-nvme, linux-s390, linux-scsi


Christoph,

> Add a helper to get the virtual address for a bvec.  This avoids that
> all callers need to know about the page + offset representation.

Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>

-- 
Martin K. Petersen	Oracle Linux Engineering

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH 02/15] block: use bvec_virt in bio_integrity_{process,free}
  2021-08-04  9:56 ` [PATCH 02/15] block: use bvec_virt in bio_integrity_{process,free} Christoph Hellwig
  2021-08-05  6:19   ` Chaitanya Kulkarni
@ 2021-08-06  2:38   ` Martin K. Petersen
  1 sibling, 0 replies; 30+ messages in thread
From: Martin K. Petersen @ 2021-08-06  2:38 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: Jens Axboe, Richard Weinberger, Anton Ivanov, Geoff Levand,
	Ilya Dryomov, Paolo Bonzini, Stefan Hajnoczi, Song Liu,
	Mike Snitzer, Coly Li, Stefan Haberland, Jan Hoeppner,
	Martin K. Petersen, Phillip Lougher, linux-block, dm-devel,
	linux-um, ceph-devel, virtualization, linux-raid, linux-bcache,
	linux-nvme, linux-s390, linux-scsi


Christoph,

> Use the bvec_virt helper to clean up the bio integrity processing a
> little bit.

Acked-by: Martin K. Petersen <martin.petersen@oracle.com>

-- 
Martin K. Petersen	Oracle Linux Engineering

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH 10/15] sd: use bvec_virt
  2021-08-04  9:56 ` [PATCH 10/15] sd: " Christoph Hellwig
  2021-08-05 16:31   ` [dm-devel] " Bart Van Assche
@ 2021-08-06  2:43   ` Martin K. Petersen
  1 sibling, 0 replies; 30+ messages in thread
From: Martin K. Petersen @ 2021-08-06  2:43 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: Jens Axboe, Richard Weinberger, Anton Ivanov, Geoff Levand,
	Ilya Dryomov, Paolo Bonzini, Stefan Hajnoczi, Song Liu,
	Mike Snitzer, Coly Li, Stefan Haberland, Jan Hoeppner,
	Martin K. Petersen, Phillip Lougher, linux-block, dm-devel,
	linux-um, ceph-devel, virtualization, linux-raid, linux-bcache,
	linux-nvme, linux-s390, linux-scsi


Christoph,

> Use bvec_virt instead of open coding it.

bv_offset is set to 0 right above but I'm OK with bvec_virt() for the
sake of consistency.

Acked-by: Martin K. Petersen <martin.petersen@oracle.com>

-- 
Martin K. Petersen	Oracle Linux Engineering

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: add a bvec_virt helper
  2021-08-04  9:56 add a bvec_virt helper Christoph Hellwig
                   ` (14 preceding siblings ...)
  2021-08-04  9:56 ` [PATCH 15/15] nvme: " Christoph Hellwig
@ 2021-08-16 12:38 ` Christoph Hellwig
  2021-08-16 16:51 ` Jens Axboe
  16 siblings, 0 replies; 30+ messages in thread
From: Christoph Hellwig @ 2021-08-16 12:38 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Richard Weinberger, Anton Ivanov, Geoff Levand, Ilya Dryomov,
	Paolo Bonzini, Stefan Hajnoczi, Song Liu, Mike Snitzer, Coly Li,
	Stefan Haberland, Jan Hoeppner, Martin K. Petersen,
	Phillip Lougher, linux-block, dm-devel, linux-um, ceph-devel,
	virtualization, linux-raid, linux-bcache, linux-nvme, linux-s390,
	linux-scsi

ping.

On Wed, Aug 04, 2021 at 11:56:19AM +0200, Christoph Hellwig wrote:
> Hi Jens,
> 
> this series adds a bvec_virt helper to return the virtual address of the
> data in bvec to replace the open coded calculation, and as a reminder
> that generall bio/bvec data can be in high memory unless it is caller
> controller or in an architecture specific driver where highmem is
> impossible.
---end quoted text---

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: add a bvec_virt helper
  2021-08-04  9:56 add a bvec_virt helper Christoph Hellwig
                   ` (15 preceding siblings ...)
  2021-08-16 12:38 ` add a bvec_virt helper Christoph Hellwig
@ 2021-08-16 16:51 ` Jens Axboe
  16 siblings, 0 replies; 30+ messages in thread
From: Jens Axboe @ 2021-08-16 16:51 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: Richard Weinberger, Anton Ivanov, Geoff Levand, Ilya Dryomov,
	Paolo Bonzini, Stefan Hajnoczi, Song Liu, Mike Snitzer, Coly Li,
	Stefan Haberland, Jan Hoeppner, Martin K. Petersen,
	Phillip Lougher, linux-block, dm-devel, linux-um, ceph-devel,
	virtualization, linux-raid, linux-bcache, linux-nvme, linux-s390,
	linux-scsi

On 8/4/21 3:56 AM, Christoph Hellwig wrote:
> Hi Jens,
> 
> this series adds a bvec_virt helper to return the virtual address of the
> data in bvec to replace the open coded calculation, and as a reminder
> that generall bio/bvec data can be in high memory unless it is caller
> controller or in an architecture specific driver where highmem is
> impossible.

Applied, thanks.

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 30+ messages in thread

end of thread, other threads:[~2021-08-16 16:51 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-04  9:56 add a bvec_virt helper Christoph Hellwig
2021-08-04  9:56 ` [PATCH 01/15] bvec: " Christoph Hellwig
2021-08-05  6:19   ` Chaitanya Kulkarni
2021-08-06  2:38   ` Martin K. Petersen
2021-08-04  9:56 ` [PATCH 02/15] block: use bvec_virt in bio_integrity_{process,free} Christoph Hellwig
2021-08-05  6:19   ` Chaitanya Kulkarni
2021-08-06  2:38   ` Martin K. Petersen
2021-08-04  9:56 ` [PATCH 03/15] dm: make EBS depend on !HIGHMEM Christoph Hellwig
2021-08-04  9:56 ` [PATCH 04/15] dm-ebs: use bvec_virt Christoph Hellwig
2021-08-04  9:56 ` [PATCH 05/15] dm-integrity: " Christoph Hellwig
2021-08-04  9:56 ` [PATCH 06/15] squashfs: " Christoph Hellwig
2021-08-04  9:56 ` [PATCH 07/15] rbd: " Christoph Hellwig
2021-08-05 12:01   ` Jeff Layton
2021-08-04  9:56 ` [PATCH 08/15] virtio_blk: " Christoph Hellwig
2021-08-05 14:17   ` Stefan Hajnoczi
2021-08-04  9:56 ` [PATCH 09/15] bcache: " Christoph Hellwig
2021-08-04 17:05   ` Coly Li
2021-08-04  9:56 ` [PATCH 10/15] sd: " Christoph Hellwig
2021-08-05 16:31   ` [dm-devel] " Bart Van Assche
2021-08-06  2:43   ` Martin K. Petersen
2021-08-04  9:56 ` [PATCH 11/15] ubd: " Christoph Hellwig
2021-08-04 10:10   ` Anton Ivanov
2021-08-04  9:56 ` [PATCH 12/15] ps3vram: " Christoph Hellwig
2021-08-04  9:56 ` [PATCH 13/15] dasd: " Christoph Hellwig
2021-08-04 20:20   ` Stefan Haberland
2021-08-04  9:56 ` [PATCH 14/15] dcssblk: " Christoph Hellwig
2021-08-04  9:56 ` [PATCH 15/15] nvme: " Christoph Hellwig
2021-08-04 14:33   ` Keith Busch
2021-08-16 12:38 ` add a bvec_virt helper Christoph Hellwig
2021-08-16 16:51 ` Jens Axboe

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).