[libvirt PATCH v2 15/24] qemu_snapshot: add merge to external snapshot delete prepare data
Peter Krempa
pkrempa at redhat.com
Mon Jul 31 12:05:45 UTC 2023
On Tue, Jun 27, 2023 at 17:07:18 +0200, Pavel Hrdina wrote:
> Before external snapshot revert every delete operation did block commit
> in order to delete a snapshot. But now when user reverts to non-leaf
> snapshot deleting leaf snapshot will not have any overlay files so we
> can just simply delete the snapshot images.
>
> Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
> ---
> src/qemu/qemu_snapshot.c | 93 ++++++++++++++++++++++++++--------------
> 1 file changed, 60 insertions(+), 33 deletions(-)
>
> diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c
> index 08cff2a9a2..9c4d26bad5 100644
> --- a/src/qemu/qemu_snapshot.c
> +++ b/src/qemu/qemu_snapshot.c
> @@ -2569,9 +2569,26 @@ qemuSnapshotFindParentSnapForDisk(virDomainMomentObj *snap,
> }
>
>
> +/**
> + * qemuSnapshotDeleteExternalPrepareData:
> + * @vm: domain object
> + * @snap: snapshot object
> + * @merge: whether we are just deleting image or not
> + * @externalData: prepared data to delete external snapshot
> + *
> + * Validate if we can delete selected snapshot @snap and prepare all necessary
> + * data that will be used when deleting snapshot as @externalData.
> + *
> + * If @merge is set to true we will merge the deleted snapshot into parent one
> + * instead of just deleting it. This is necessary when operating on snapshot
> + * that has existing overlay files.
> + *
> + * Returns -1 on error, 0 on success.
> + */
> static int
> qemuSnapshotDeleteExternalPrepareData(virDomainObj *vm,
> virDomainMomentObj *snap,
> + bool merge,
> GSList **externalData)
> {
> ssize_t i;
> @@ -2579,7 +2596,6 @@ qemuSnapshotDeleteExternalPrepareData(virDomainObj *vm,
> g_autoslist(qemuSnapshotDeleteExternalData) ret = NULL;
>
> for (i = 0; i < snapdef->ndisks; i++) {
> - g_autofree qemuSnapshotDeleteExternalData *data = NULL;
> virDomainSnapshotDiskDef *snapDisk = &(snapdef->disks[i]);
>
> if (snapDisk->snapshot != VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL)
> @@ -2591,14 +2607,18 @@ qemuSnapshotDeleteExternalPrepareData(virDomainObj *vm,
> snapDisk->name);
> return -1;
> }
> + }
> +
> + for (i = 0; i < snapdef->ndisks; i++) {
I didn't really find a reason why you've added another loop here. The
only thing the function does is to prepare data, so I don't think there
is anything that'd require another pass through the disks.
> + virDomainSnapshotDiskDef *snapDisk = &(snapdef->disks[i]);
> + g_autofree qemuSnapshotDeleteExternalData *data = NULL;
> +
> + if (snapDisk->snapshot != VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL)
> + continue;
With the extra loop removed:
Reviewed-by: Peter Krempa <pkrempa at redhat.com>
More information about the libvir-list
mailing list