On 1/24/25 23:36, Alexander Atanasov wrote:
diff --git a/drivers/md/dm-ploop-cmd.c b/drivers/md/dm-ploop-cmd.c
index 84e965855698..88af310ee52d 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);

After this change the locks in ploop_find_bat_entry should probably change to non-_irq variants.

--
Best regards, Tikhomirov Pavel
Senior Software Developer, Virtuozzo.

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

Reply via email to