[pve-devel] applied: [PATCH storage] remove lock from is_base_and_used check

Thomas Lamprecht t.lamprecht at proxmox.com
Sat Feb 6 14:48:38 CET 2021


On 15.01.21 11:58, Fabian Ebner wrote:
> and squash the __no_lock-variant into it.
> 
> This lock is not broad enough, because for a caller that plans to do or not do
> some storage operation based on the result of the check, the following could
> happen:
> 1. volume_is_base_and_used is called and the result is used to enter a branch
> 2. situation on the storage changes in the meantime
> 3. the branch chosen in 1. might not be the one that should be taken anymore
> 
> This means that callers are responsible for locking, and luckily the existing
> callers do use their own locks already:
> 1. vdisk_free used the __no_lock-variant with a broader lock also covering
>    the free operation.
> 2. vdisk_clone is not a caller, but is relevant and it does lock the storage
> 2. the calls during VM migration and VM destruction happen in the context of a
>    locked VM config. Because the clone operation also locks the VM config, it
>    cannot happen that a linked clone is created while the template VM is
>    migrated away or destroyed or vice versa. And even if that were the case,
>    the base disk would not be freed, because of what vdisk_free/vdisk_clone do.
> 
> Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
> ---
>  PVE/Storage.pm | 28 ++++++++++------------------
>  1 file changed, 10 insertions(+), 18 deletions(-)
> 
>

applied, thanks!





More information about the pve-devel mailing list