The commit is pushed to "branch-rh7-3.10.0-1062.7.1.vz7.130.x-ovz" and will 
appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-1062.7.1.vz7.130.15
------>
commit 7f6683ce9e8c7ec4a1ac652c6bc5e047a72e55d4
Author: Kirill Tkhai <ktk...@virtuozzo.com>
Date:   Wed Feb 5 12:55:18 2020 +0300

    ploop: Introduce .sync_read_many method
    
    The new method to read many pages in one batch request.
    
    Signed-off-by: Kirill Tkhai <ktk...@virtuozzo.com>
    
    Patchset description:
    Possibility to batch page reads and batch on holes_bitmap population
    
    Submit batch request up to 10 clusters (10Mb, 2560 pages)
    during holes_bitmap population to speed up ploop mount
    of big images.
    
    https://jira.sw.ru/browse/PSBM-101246
    
    Kirill Tkhai (4):
          ploop: Teach dio_sync_io() work with many pages
          ploop: Teach kaio_sync_io() work with many pages
          ploop: Introduce .sync_read_many method
          ploop: Read 10 BAT clusters on holes_bitmap population
---
 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(+)

diff --git a/drivers/block/ploop/io_direct.c b/drivers/block/ploop/io_direct.c
index 5b56fc59da07e..1fa7bfd6a2bbf 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 c48b80b9785f1..beafc0a68c2ba 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 09333e9c34531..66591623f79d0 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);
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to