lock bitmap in grow update header and disable delayed writeback

https://virtuozzo.atlassian.net/browse/VSTOR-91821
Signed-off-by: Alexander Atanasov <alexander.atana...@virtuozzo.com>
---
 drivers/md/dm-ploop-cmd.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/md/dm-ploop-cmd.c b/drivers/md/dm-ploop-cmd.c
index 78cdcc81c75f..c919d796e108 100644
--- a/drivers/md/dm-ploop-cmd.c
+++ b/drivers/md/dm-ploop-cmd.c
@@ -294,19 +294,24 @@ static int ploop_grow_relocate_cluster(struct ploop 
*ploop,
 
        dst_clu = cmd->resize.dst_clu;
 
+       spin_lock_irq(&ploop->bat_lock);
+
        /* Relocate clu and update index */
        clu = ploop_find_bat_entry(ploop, dst_clu, &is_locked);
        if (clu == UINT_MAX || is_locked) {
                /* dst_clu in top delta is not occupied? */
                if (!test_bit(dst_clu, ploop->holes_bitmap) || is_locked) {
                        WARN_ON_ONCE(1);
+                       spin_unlock_irq(&ploop->bat_lock);
                        ret = -EIO;
                        goto out;
                }
                /* Cluster is free, occupy it. Skip relocaton */
                ploop_hole_clear_bit(dst_clu, ploop);
+               spin_unlock_irq(&ploop->bat_lock);
                goto not_occupied;
        }
+       spin_unlock_irq(&ploop->bat_lock);
 
        /* Read full clu sync */
        ret = ploop_read_cluster_sync(ploop, pio, dst_clu);
@@ -438,6 +443,7 @@ static int ploop_process_resize_cmd(struct ploop *ploop, 
struct ploop_cmd *cmd)
        u32 dst_clu;
        int ret = 0;
 
+       ploop_disable_writeback_delay(ploop);
        /* Update memory arrays and hb_nr, but do not update nr_bat_entries. */
        ploop_advance_holes_bitmap(ploop, cmd);
 
@@ -466,6 +472,8 @@ static int ploop_process_resize_cmd(struct ploop *ploop, 
struct ploop_cmd *cmd)
        }
        spin_unlock_irq(&ploop->bat_lock);
 
+       ploop_enable_writeback_delay(ploop);
+
        return ret;
 }
 ALLOW_ERROR_INJECTION(ploop_process_resize_cmd, ERRNO);
-- 
2.43.0

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

Reply via email to