[Devel] [PATCH vz9 v1 33/63] dm-ploop: convert md page rw lock to spin lock

Pavel Tikhomirov ptikhomirov at virtuozzo.com
Thu Feb 6 11:42:33 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 f98542e952e1..fa9f8c9d8d40 100644
> --- a/drivers/md/dm-ploop-cmd.c
> +++ b/drivers/md/dm-ploop-cmd.c
> @@ -34,7 +34,7 @@ static void ploop_advance_holes_bitmap(struct ploop *ploop,
>   		return;
>   	cmd->resize.stage++;
>   
> -	write_lock_irq(&ploop->bat_rwlock);
> +	write_lock_irqsave(&ploop->bat_rwlock, flags);

Why s/irq/irqsave/ ?

   +-< ploop_advance_holes_bitmap
     +-< ploop_process_resize_cmd
     | +-< ploop_resize
     | | +-< ploop_message
           +-< ploop_target->message
             +-< target_message # ioctl - process context

It can't be called in interrupt context, thus should be "_irq".

>   	/* Copy and swap holes_bitmap */
>   	size = DIV_ROUND_UP(ploop->hb_nr, 8);
>   	memcpy(cmd->resize.holes_bitmap, ploop->holes_bitmap, size);
> @@ -46,7 +46,7 @@ static void ploop_advance_holes_bitmap(struct ploop *ploop,
>   		ploop_init_be_iter(ploop, md->id, &i, &end);
>   		bat_entries = md->kmpage;
>   
> -		spin_lock_irqsave(&md->md_lock, flags); /* read */
> +		spin_lock(&md->md_lock); /* read */
>   		for (; i <= end; i++) {
>   			if (!ploop_md_page_cluster_is_in_top_delta(ploop, md, i))
>   				continue;
> @@ -57,9 +57,9 @@ static void ploop_advance_holes_bitmap(struct ploop *ploop,
>   				ploop_hole_clear_bit(dst_clu, ploop);
>   			}
>   		}
> -		spin_unlock_irqrestore(&md->md_lock, flags);
> +		spin_unlock(&md->md_lock);
>   	}
> -	write_unlock_irq(&ploop->bat_rwlock);
> +	write_unlock_irqrestore(&ploop->bat_rwlock, flags);

Same.

>   }
>   
>   static int ploop_wait_for_completion_maybe_killable(struct completion *comp,

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



More information about the Devel mailing list