[Devel] [PATCH vz9 v1 46/63] dm-ploop: resize operation - add holes bitmap locking
Pavel Tikhomirov
ptikhomirov at virtuozzo.com
Thu Feb 6 12:05:38 MSK 2025
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.
More information about the Devel
mailing list