[libvirt PATCH 0/3] external snapshot delete fixes

Pavel Hrdina (3): qemu_snapshot: properly ignore disks with manual snapshot qemu_snapshot: fix external snapshot deletion for non-active snapshots domainsnapshot: add snapshotDeleteInProgress to RNG schema src/conf/schemas/domainsnapshot.rng | 10 ++++++++++ src/qemu/qemu_snapshot.c | 26 +++++++++++++------------- 2 files changed, 23 insertions(+), 13 deletions(-) -- 2.39.2

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2173142 Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- src/qemu/qemu_snapshot.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c index cfa531edef..7207b5879a 100644 --- a/src/qemu/qemu_snapshot.c +++ b/src/qemu/qemu_snapshot.c @@ -2314,7 +2314,7 @@ qemuSnapshotDeleteExternalPrepare(virDomainObj *vm, g_autofree qemuSnapshotDeleteExternalData *data = NULL; virDomainSnapshotDiskDef *snapDisk = &(snapdef->disks[i]); - if (snapDisk->snapshot == VIR_DOMAIN_SNAPSHOT_LOCATION_NO) + if (snapDisk->snapshot != VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL) continue; if (snapDisk->snapshotDeleteInProgress) { -- 2.39.2

For shutoff VMs we don't have the storage source backing chain populated so it will fail this check and error out. Move it to part that is done only when VM is running. Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- src/qemu/qemu_snapshot.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c index 7207b5879a..7aa4195f04 100644 --- a/src/qemu/qemu_snapshot.c +++ b/src/qemu/qemu_snapshot.c @@ -2331,18 +2331,6 @@ qemuSnapshotDeleteExternalPrepare(virDomainObj *vm, if (!data->domDisk) return -1; - data->diskSrc = virStorageSourceChainLookupBySource(data->domDisk->src, - data->snapDisk->src, - &data->prevDiskSrc); - if (!data->diskSrc) - return -1; - - if (!virStorageSourceIsSameLocation(data->diskSrc, data->snapDisk->src)) { - virReportError(VIR_ERR_OPERATION_FAILED, "%s", - _("VM disk source and snapshot disk source are not the same")); - return -1; - } - data->parentDomDisk = virDomainDiskByTarget(snapdef->parent.dom, data->snapDisk->name); if (!data->parentDomDisk) { @@ -2353,6 +2341,18 @@ qemuSnapshotDeleteExternalPrepare(virDomainObj *vm, } if (virDomainObjIsActive(vm)) { + data->diskSrc = virStorageSourceChainLookupBySource(data->domDisk->src, + data->snapDisk->src, + &data->prevDiskSrc); + if (!data->diskSrc) + return -1; + + if (!virStorageSourceIsSameLocation(data->diskSrc, data->snapDisk->src)) { + virReportError(VIR_ERR_OPERATION_FAILED, "%s", + _("VM disk source and snapshot disk source are not the same")); + return -1; + } + data->parentDiskSrc = data->diskSrc->backingStore; if (!virStorageSourceIsBacking(data->parentDiskSrc)) { virReportError(VIR_ERR_OPERATION_FAILED, "%s", -- 2.39.2

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2174397 Fixes: 565bcb5d79dddaf1d0d14cffe1f3ae78d76b10a0 Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- src/conf/schemas/domainsnapshot.rng | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/conf/schemas/domainsnapshot.rng b/src/conf/schemas/domainsnapshot.rng index 4048266f1d..45f01b96cd 100644 --- a/src/conf/schemas/domainsnapshot.rng +++ b/src/conf/schemas/domainsnapshot.rng @@ -123,6 +123,14 @@ <ref name="disksnapshotdriver"/> </define> + <define name="snapshotDeleteInProgress"> + <optional> + <element name="snapshotDeleteInProgress"> + <empty/> + </element> + </optional> + </define> + <define name="disksnapshot"> <element name="disk"> <attribute name="name"> @@ -175,6 +183,7 @@ </element> </optional> <ref name="storageSourceExtra"/> + <ref name="snapshotDeleteInProgress"/> </interleave> </group> <group> @@ -200,6 +209,7 @@ </element> </optional> <ref name="storageSourceExtra"/> + <ref name="snapshotDeleteInProgress"/> </interleave> </group> <ref name="diskSourceNetwork"/> -- 2.39.2

On Wed, Mar 08, 2023 at 02:29:19PM +0100, Pavel Hrdina wrote:
Pavel Hrdina (3): qemu_snapshot: properly ignore disks with manual snapshot qemu_snapshot: fix external snapshot deletion for non-active snapshots domainsnapshot: add snapshotDeleteInProgress to RNG schema
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
src/conf/schemas/domainsnapshot.rng | 10 ++++++++++ src/qemu/qemu_snapshot.c | 26 +++++++++++++------------- 2 files changed, 23 insertions(+), 13 deletions(-)
-- 2.39.2
participants (2)
-
Martin Kletzander
-
Pavel Hrdina