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 e6f96cfdd79c3c7e37b8d4334ff0317828bba2a5
Author: Kirill Tkhai <ktk...@virtuozzo.com>
Date:   Mon May 17 19:04:42 2021 +0300

    ploop: Convert endio_bio_list to endio_list
    
    Signed-off-by: Kirill Tkhai <ktk...@virtuozzo.com>
    
    =====================
    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 <ktk...@virtuozzo.com>
---
 drivers/md/dm-ploop-map.c | 19 ++++++++++---------
 drivers/md/dm-ploop.h     | 14 ++++++++++++--
 2 files changed, 22 insertions(+), 11 deletions(-)

diff --git a/drivers/md/dm-ploop-map.c b/drivers/md/dm-ploop-map.c
index 8b60d200d729..39dc0a07f19f 100644
--- a/drivers/md/dm-ploop-map.c
+++ b/drivers/md/dm-ploop-map.c
@@ -88,7 +88,7 @@ static void __ploop_init_end_io(struct ploop *ploop, struct 
pio *pio)
        pio->ref_index = PLOOP_REF_INDEX_INVALID;
        pio->piwb = NULL;
        INIT_LIST_HEAD(&pio->list);
-       pio->endio_bio_list = NULL;
+       INIT_LIST_HEAD(&pio->endio_list);
        /* FIXME: assign real cluster? */
        pio->cluster = UINT_MAX;
        RB_CLEAR_NODE(&pio->node);
@@ -245,8 +245,9 @@ struct pio *find_lk_of_cluster(struct ploop *ploop, 
unsigned int cluster)
 
 static void add_endio_bio(struct pio *h, struct bio *later_bio)
 {
-       later_bio->bi_next = h->endio_bio_list;
-       h->endio_bio_list = later_bio;
+       struct pio *lpio = bio_to_endio_hook(later_bio);
+
+       list_add_tail(&lpio->list, &h->endio_list);
 }
 
 static void inc_nr_inflight_raw(struct ploop *ploop, struct pio *h)
@@ -326,22 +327,22 @@ static void link_endio_hook(struct ploop *ploop, struct 
pio *new, struct rb_root
 
 /*
  * Removes endio hook of completed bio either from inflight_bios_rbtree
- * or from exclusive_bios_rbtree. BIOs from endio_bio_list are requeued
+ * or from exclusive_bios_rbtree. BIOs from endio_list are requeued
  * to deferred_list.
  */
 static void unlink_endio_hook(struct ploop *ploop, struct rb_root *root,
                              struct pio *h, struct bio_list *bio_list)
 {
-       struct bio *iter;
+       struct bio *bio;
+       struct pio *pio;
 
        BUG_ON(RB_EMPTY_NODE(&h->node));
 
        rb_erase(&h->node, root);
        RB_CLEAR_NODE(&h->node);
-       while ((iter = h->endio_bio_list) != NULL) {
-               h->endio_bio_list = iter->bi_next;
-               iter->bi_next = NULL;
-               bio_list_add(bio_list, iter);
+       while ((pio = pio_list_pop(&h->endio_list)) != NULL) {
+               bio = dm_bio_from_per_bio_data(pio, sizeof(struct pio));
+               bio_list_add(bio_list, bio);
        }
 }
 
diff --git a/drivers/md/dm-ploop.h b/drivers/md/dm-ploop.h
index a42c9d603df4..421fcc153bd9 100644
--- a/drivers/md/dm-ploop.h
+++ b/drivers/md/dm-ploop.h
@@ -233,8 +233,8 @@ struct pio {
        struct list_head list;
 
        struct rb_node node;
-       /* List of bios, which will be queued from this bio end */
-       struct bio *endio_bio_list;
+       /* List of pios, which will be queued from this pio end */
+       struct list_head endio_list;
 
        unsigned int cluster;
 
@@ -489,6 +489,16 @@ static inline struct pio *bio_to_endio_hook(struct bio 
*bio)
        return dm_per_bio_data(bio, sizeof(struct pio));
 }
 
+static inline struct pio *pio_list_pop(struct list_head *pio_list)
+{
+       struct pio *pio;
+
+       pio = list_first_entry_or_null(pio_list, struct pio, list);
+       if (pio)
+               list_del_init(&pio->list);
+       return pio;
+}
+
 extern void md_page_insert(struct ploop *ploop, struct md_page *md);
 extern void free_md_page(struct md_page *md);
 extern void free_md_pages_tree(struct rb_root *root);
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to