[rh7,3/4] ploop: Introduce .sync_read_many method

Submitted by Kirill Tkhai on Feb. 4, 2020, 2:14 p.m.

Details

Message ID 158082565984.184901.2070833498929412032.stgit@localhost.localdomain
State New
Series "Possibility to batch page reads and batch on holes_bitmap population"
Headers show

Commit Message

Kirill Tkhai Feb. 4, 2020, 2:14 p.m.
The new method to read many pages in one batch request.

Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
---
 drivers/block/ploop/io_direct.c |    8 ++++++++
 drivers/block/ploop/io_kaio.c   |    8 ++++++++
 include/linux/ploop/ploop.h     |    2 ++
 3 files changed, 18 insertions(+)

Patch hide | download patch | download mbox

diff --git a/drivers/block/ploop/io_direct.c b/drivers/block/ploop/io_direct.c
index 5b56fc59da07..1fa7bfd6a2bb 100644
--- a/drivers/block/ploop/io_direct.c
+++ b/drivers/block/ploop/io_direct.c
@@ -1207,6 +1207,13 @@  dio_sync_read(struct ploop_io * io, struct page * page, unsigned int len,
 	return dio_sync_io(io, READ_SYNC, pages, 1, len, off, pos);
 }
 
+static int dio_sync_read_many(struct ploop_io *io, struct page *pages[],
+			      unsigned int nr_pages, sector_t sec)
+{
+	return dio_sync_io(io, READ_SYNC, pages, nr_pages,
+			   PAGE_SIZE * nr_pages, 0, sec);
+}
+
 static int
 dio_sync_write(struct ploop_io * io, struct page * page, unsigned int len,
 	       unsigned int off, sector_t sec)
@@ -1774,6 +1781,7 @@  static struct ploop_io_ops ploop_io_ops_direct =
 	.write_page	=	dio_write_page,
 	.sync_read	=	dio_sync_read,
 	.sync_write	=	dio_sync_write,
+	.sync_read_many =	dio_sync_read_many,
 
 	.init		=	dio_init,
 	.destroy	=	dio_destroy,
diff --git a/drivers/block/ploop/io_kaio.c b/drivers/block/ploop/io_kaio.c
index c48b80b9785f..beafc0a68c2b 100644
--- a/drivers/block/ploop/io_kaio.c
+++ b/drivers/block/ploop/io_kaio.c
@@ -877,6 +877,13 @@  kaio_sync_write(struct ploop_io * io, struct page * page, unsigned int len,
 	return ret;
 }
 
+static int kaio_sync_read_many(struct ploop_io *io, struct page *pages[],
+				unsigned int nr_pages, sector_t sec)
+{
+	return kaio_sync_io(io, READ_SYNC, pages, nr_pages,
+			    PAGE_SIZE * nr_pages, 0, sec);
+}
+
 static int kaio_alloc_sync(struct ploop_io * io, loff_t pos, loff_t len)
 {
 	int err = __kaio_truncate(io, io->files.file, pos + len);
@@ -1160,6 +1167,7 @@  static struct ploop_io_ops ploop_io_ops_kaio =
 	.write_page	=	kaio_write_page,
 	.sync_read	=	kaio_sync_read,
 	.sync_write	=	kaio_sync_write,
+	.sync_read_many =	kaio_sync_read_many,
 
 	.init		=	kaio_init,
 	.destroy	=	kaio_destroy,
diff --git a/include/linux/ploop/ploop.h b/include/linux/ploop/ploop.h
index 09333e9c3453..66591623f79d 100644
--- a/include/linux/ploop/ploop.h
+++ b/include/linux/ploop/ploop.h
@@ -178,6 +178,8 @@  struct ploop_io_ops
 			     unsigned int len, unsigned int off, sector_t sec);
 	int	(*sync_write)(struct ploop_io * io, struct page * page,
 			      unsigned int len, unsigned int off, sector_t sec);
+	int	(*sync_read_many)(struct ploop_io *io, struct page *pages[],
+				  unsigned int nr_pages, sector_t sec);
 
 	int	(*init)(struct ploop_io * io);
 	void	(*destroy)(struct ploop_io * io);