[libvirt PATCH 14/20] qemu_snapshot: add support to delete external snapshot without block commit
Peter Krempa
pkrempa at redhat.com
Tue Apr 4 14:39:31 UTC 2023
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 at redhat.com>
> ---
> 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 at redhat.com>
More information about the libvir-list
mailing list