The commit is pushed to "branch-rh8-4.18.0-240.1.1.vz8.5.x-ovz" and will appear 
at https://src.openvz.org/scm/ovz/vzkernel.git
after rh8-4.18.0-240.1.1.vz8.5.30
------>
commit 8524fe259b8eead0b596e19640fbcc761611cda4
Author: Kirill Tkhai <[email protected]>
Date:   Mon May 17 19:04:54 2021 +0300

    ploop: Add endio_cb
    
    Similar to bio->bi_end_io but for pio
    
    Signed-off-by: Kirill Tkhai <[email protected]>
    
    =====================
    Patchset description:
    
    dm-ploop: Kill loop
    
    Intermediate patches can't be base for bisect.
    
    In scope of https://jira.sw.ru/browse/PSBM-123654
    
    Signed-off-by: Kirill Tkhai <[email protected]>
---
 drivers/md/dm-ploop-map.c | 16 +++++++++++++---
 drivers/md/dm-ploop.h     |  6 ++++++
 2 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/drivers/md/dm-ploop-map.c b/drivers/md/dm-ploop-map.c
index aebee550f7a3..fec9d16d8c0d 100644
--- a/drivers/md/dm-ploop-map.c
+++ b/drivers/md/dm-ploop-map.c
@@ -123,14 +123,22 @@ static int ploop_pio_cluster(struct ploop *ploop, struct 
pio *pio,
        return 0;
 }
 
-void pio_endio(struct pio *pio)
+static void call_bio_endio(struct pio *pio, void *data, blk_status_t bi_status)
 {
-       struct bio *bio = dm_bio_from_per_bio_data(pio, sizeof(*pio));
+       struct bio *bio = data;
 
-       bio->bi_status = pio->bi_status;
+       bio->bi_status = bi_status;
        bio_endio(bio);
 }
 
+void pio_endio(struct pio *pio)
+{
+       ploop_endio_t endio_cb = pio->endio_cb;
+       void *endio_cb_data = pio->endio_cb_data;
+
+       endio_cb(pio, endio_cb_data, pio->bi_status);
+}
+
 void defer_pios(struct ploop *ploop, struct pio *pio, struct list_head 
*pio_list)
 {
        unsigned long flags;
@@ -1632,6 +1640,8 @@ int ploop_map(struct dm_target *ti, struct bio *bio)
        pio->bi_iter = bio->bi_iter;
        pio->bi_io_vec = bio->bi_io_vec;
        pio->bi_opf = bio->bi_opf;
+       pio->endio_cb = call_bio_endio;
+       pio->endio_cb_data = bio;
 
        if (pio->bi_iter.bi_size) {
                if (ploop_pio_cluster(ploop, pio, &cluster) < 0)
diff --git a/drivers/md/dm-ploop.h b/drivers/md/dm-ploop.h
index a35770437dc6..dad0e5857a50 100644
--- a/drivers/md/dm-ploop.h
+++ b/drivers/md/dm-ploop.h
@@ -229,6 +229,9 @@ struct ploop {
        spinlock_t pb_lock;
 };
 
+struct pio;
+typedef void (*ploop_endio_t)(struct pio *, void *, blk_status_t);
+
 struct pio {
        struct list_head list;
 
@@ -241,6 +244,9 @@ struct pio {
        unsigned int            bi_opf;
        blk_status_t bi_status;
 
+       ploop_endio_t endio_cb;
+       void *endio_cb_data;
+
        unsigned int cluster;
 
 #define PLOOP_END_IO_NONE              0
_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to