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