[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