Re: [libvirt PATCH 14/20] qemu_snapshot: add support to delete external snapshot without block commit

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Mar 13, 2023 at 16:42:15 +0100, Pavel Hrdina wrote:
> When block commit is not needed we can just simply unlink the
> disk files.
> 
> Signed-off-by: Pavel Hrdina <phrdina@xxxxxxxxxx>
> ---
>  src/qemu/qemu_snapshot.c | 55 +++++++++++++++++++++++++---------------
>  1 file changed, 35 insertions(+), 20 deletions(-)
> 
> diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c
> index be2e5c8cc4..dbcdf56758 100644
> --- a/src/qemu/qemu_snapshot.c
> +++ b/src/qemu/qemu_snapshot.c

[...]

> @@ -2949,31 +2951,41 @@ qemuSnapshotDiscardExternal(virDomainObj *vm,
>          virTristateBool autofinalize = VIR_TRISTATE_BOOL_NO;
>          unsigned int commitFlags = VIR_DOMAIN_BLOCK_COMMIT_DELETE;
>  
> -        if (data->domDisk->src == data->diskSrc) {
> -            commitFlags |= VIR_DOMAIN_BLOCK_COMMIT_ACTIVE;
> -            autofinalize = VIR_TRISTATE_BOOL_YES;
> +        if (data->blockCommit) {
> +            if (data->domDisk->src == data->diskSrc) {
> +                commitFlags |= VIR_DOMAIN_BLOCK_COMMIT_ACTIVE;
> +                autofinalize = VIR_TRISTATE_BOOL_YES;
> +            }
> +
> +            if (qemuSnapshotSetInvalid(vm, data->parentSnap, data->snapDisk, true) < 0)
> +                goto error;
> +
> +            data->job = qemuBlockCommit(vm,
> +                                        data->domDisk,
> +                                        data->parentDiskSrc,
> +                                        data->diskSrc,
> +                                        data->prevDiskSrc,
> +                                        0,
> +                                        VIR_ASYNC_JOB_SNAPSHOT,
> +                                        autofinalize,
> +                                        commitFlags);
> +
> +            if (!data->job)
> +                goto error;
> +        } else {
> +            if (unlink(data->snapDisk->src->path) < 0) {

This can be done only when the 'src' object is "local storage"
(virStorageSourceIsLocalStorage)

> +                VIR_WARN("Failed to remove snapshot image '%s'",
> +                         data->snapDisk->name);
> +            }

Reviewed-by: Peter Krempa <pkrempa@xxxxxxxxxx>




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux