The commit is pushed to "branch-rh7-3.10.0-327.18.2.vz7.14.x-ovz" and will 
appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-327.18.2.vz7.14.20
------>
commit 3bd453c746c97de86290e3525438e672de2804c9
Author: Dmitry Monakhov <[email protected]>
Date:   Mon Jun 27 11:10:23 2016 +0400

    ploop: minor rework of ->write_page() io method
    
    No functional changes. Next patch will use this
    rework to pass REQ_FLUSH to dio_write_page().
    
    The patch is actually a part of Dima's patch:
    
    > [PATCH 3/3] ploop: fixup FORCE_{FLUSH,FUA} handling v3
    
    Signed-off-by: Maxim Patlasov <[email protected]>
    Acked-by: Dmitry Monakhov <[email protected]>
---
 drivers/block/ploop/io_direct.c | 5 ++---
 drivers/block/ploop/io_kaio.c   | 8 +++++---
 drivers/block/ploop/map.c       | 5 +++--
 include/linux/ploop/ploop.h     | 2 +-
 4 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/drivers/block/ploop/io_direct.c b/drivers/block/ploop/io_direct.c
index 6d1d32a..77e2f0a 100644
--- a/drivers/block/ploop/io_direct.c
+++ b/drivers/block/ploop/io_direct.c
@@ -1510,15 +1510,14 @@ dio_read_page(struct ploop_io * io, struct 
ploop_request * preq,
 
 static void
 dio_write_page(struct ploop_io * io, struct ploop_request * preq,
-              struct page * page, sector_t sec, int fua)
+              struct page * page, sector_t sec, unsigned long rw)
 {
        if (!(io->files.file->f_mode & FMODE_WRITE)) {
                PLOOP_FAIL_REQUEST(preq, -EBADF);
                return;
        }
 
-       dio_io_page(io, WRITE | (fua ? REQ_FUA : 0) | REQ_SYNC,
-                   preq, page, sec);
+       dio_io_page(io, rw | WRITE | REQ_SYNC, preq, page, sec);
 }
 
 static int
diff --git a/drivers/block/ploop/io_kaio.c b/drivers/block/ploop/io_kaio.c
index e4e4411..73edc5e 100644
--- a/drivers/block/ploop/io_kaio.c
+++ b/drivers/block/ploop/io_kaio.c
@@ -612,12 +612,14 @@ kaio_read_page(struct ploop_io * io, struct ploop_request 
* preq,
 
 static void
 kaio_write_page(struct ploop_io * io, struct ploop_request * preq,
-                struct page * page, sector_t sec, int fua)
+                struct page * page, sector_t sec, unsigned long rw)
 {
        ploop_prepare_tracker(preq, sec);
 
-       /* No FUA in kaio, convert it to fsync */
-       if (fua)
+       /* No FUA in kaio, convert it to fsync. Don't care
+          about REQ_FLUSH: only io_direct relies on it,
+          io_kaio implements delay_fua in another way... */
+       if (rw & REQ_FUA)
                set_bit(PLOOP_REQ_KAIO_FSYNC, &preq->state);
 
        kaio_io_page(io, IOCB_CMD_WRITE_ITER, preq, page, sec);
diff --git a/drivers/block/ploop/map.c b/drivers/block/ploop/map.c
index 3ba8a22..ae6cc15 100644
--- a/drivers/block/ploop/map.c
+++ b/drivers/block/ploop/map.c
@@ -966,7 +966,7 @@ void ploop_index_update(struct ploop_request * preq)
                set_bit(PLOOP_REQ_FORCE_FUA, &preq->state);
 
        top_delta->io.ops->write_page(&top_delta->io, preq, page, sec,
-                                     !!(preq->req_rw & REQ_FUA));
+                                     preq->req_rw & REQ_FUA);
        put_page(page);
        return;
 
@@ -1210,7 +1210,8 @@ static void map_wb_complete(struct map_node * m, int err)
        if (force_fua)
                set_bit(PLOOP_REQ_FORCE_FUA, &main_preq->state);
 
-       top_delta->io.ops->write_page(&top_delta->io, main_preq, page, sec, 
fua);
+       top_delta->io.ops->write_page(&top_delta->io, main_preq, page, sec,
+                                     fua ? REQ_FUA : 0);
        put_page(page);
 }
 
diff --git a/include/linux/ploop/ploop.h b/include/linux/ploop/ploop.h
index e1d8686..3e53b35 100644
--- a/include/linux/ploop/ploop.h
+++ b/include/linux/ploop/ploop.h
@@ -164,7 +164,7 @@ struct ploop_io_ops
        void    (*read_page)(struct ploop_io * io, struct ploop_request * preq,
                             struct page * page, sector_t sec);
        void    (*write_page)(struct ploop_io * io, struct ploop_request * preq,
-                             struct page * page, sector_t sec, int fua);
+                             struct page * page, sector_t sec, unsigned long 
rw);
 
 
        int     (*sync_read)(struct ploop_io * io, struct page * page,
_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to