Signed-off-by: Kirill Tkhai <ktk...@virtuozzo.com>
---
 drivers/md/dm-ploop-map.c |   12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/drivers/md/dm-ploop-map.c b/drivers/md/dm-ploop-map.c
index a4cc8de169c4..692cf1e80936 100644
--- a/drivers/md/dm-ploop-map.c
+++ b/drivers/md/dm-ploop-map.c
@@ -196,10 +196,11 @@ static struct pio * split_and_chain_pio(struct ploop 
*ploop,
 }
 
 static int split_pio_to_list(struct ploop *ploop, struct pio *pio,
-                            struct list_head *list)
+                            struct list_head *ret_list)
 {
        u32 clu_size = CLU_SIZE(ploop);
        struct pio *split;
+       LIST_HEAD(list);
 
        while (1) {
                loff_t start = to_bytes(pio->bi_iter.bi_sector);
@@ -217,12 +218,14 @@ static int split_pio_to_list(struct ploop *ploop, struct 
pio *pio,
                if (!split)
                        goto err;
 
-               list_add_tail(&split->list, list);
+               list_add_tail(&split->list, &list);
        }
 
+       list_splice_tail(&list, ret_list);
+       list_add_tail(&pio->list, ret_list);
        return 0;
 err:
-       while ((pio = pio_list_pop(list)) != NULL) {
+       while ((pio = pio_list_pop(&list)) != NULL) {
                pio->bi_status = BLK_STS_RESOURCE;
                pio_endio(pio);
        }
@@ -1737,10 +1740,9 @@ static void submit_pio(struct ploop *ploop, struct pio 
*pio)
 
                if (WARN_ON_ONCE(pio->bi_op != REQ_OP_FLUSH))
                        goto kill;
+               list_add_tail(&pio->list, &list);
        }
 
-       list_add(&pio->list, &list);
-
        spin_lock_irqsave(&ploop->deferred_lock, flags);
        if (unlikely(ploop->stop_submitting_pios)) {
                list_splice_tail(&list, &ploop->suspended_pios);


_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to