render / rpms / libvirt

Forked from rpms/libvirt 7 months ago
Clone
735c6b
From 3ef43d47b0a5a49b0896b1725476b4b6ec0629b0 Mon Sep 17 00:00:00 2001
735c6b
Message-Id: <3ef43d47b0a5a49b0896b1725476b4b6ec0629b0@dist-git>
735c6b
From: Pavel Hrdina <phrdina@redhat.com>
735c6b
Date: Tue, 21 Feb 2023 16:10:56 +0100
735c6b
Subject: [PATCH] qemu_snapshot: remove memory snapshot when deleting external
735c6b
 snapshot
735c6b
735c6b
When deleting external snapshot we should remove the memory snapshot
735c6b
file as well.
735c6b
735c6b
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
735c6b
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
735c6b
(cherry picked from commit 356e227208ec66fff178b91ed4b1197c7e6cf974)
735c6b
735c6b
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2170826
735c6b
735c6b
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
735c6b
---
735c6b
 src/qemu/qemu_snapshot.c | 14 ++++++++++++--
735c6b
 1 file changed, 12 insertions(+), 2 deletions(-)
735c6b
735c6b
diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c
735c6b
index b8416808b3..5cdcbc6290 100644
735c6b
--- a/src/qemu/qemu_snapshot.c
735c6b
+++ b/src/qemu/qemu_snapshot.c
735c6b
@@ -2684,9 +2684,11 @@ qemuSnapshotSetInvalid(virDomainObj *vm,
735c6b
 
735c6b
 static int
735c6b
 qemuSnapshotDiscardExternal(virDomainObj *vm,
735c6b
+                            virDomainMomentObj *snap,
735c6b
                             GSList *externalData)
735c6b
 {
735c6b
     GSList *cur = NULL;
735c6b
+    virDomainSnapshotDef *snapdef = virDomainSnapshotObjGetDef(snap);
735c6b
 
735c6b
     for (cur = externalData; cur; cur = g_slist_next(cur)) {
735c6b
         qemuSnapshotDeleteExternalData *data = cur->data;
735c6b
@@ -2756,6 +2758,14 @@ qemuSnapshotDiscardExternal(virDomainObj *vm,
735c6b
             goto error;
735c6b
     }
735c6b
 
735c6b
+    if (snapdef->memory == VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL &&
735c6b
+        snapdef->memorysnapshotfile) {
735c6b
+        if (unlink(snapdef->memorysnapshotfile) < 0) {
735c6b
+            VIR_WARN("failed to remove memory snapshot '%s'",
735c6b
+                     snapdef->memorysnapshotfile);
735c6b
+        }
735c6b
+    }
735c6b
+
735c6b
     return 0;
735c6b
 
735c6b
  error:
735c6b
@@ -2886,7 +2896,7 @@ qemuSnapshotDiscardImpl(virQEMUDriver *driver,
735c6b
             }
735c6b
 
735c6b
             if (virDomainSnapshotIsExternal(snap)) {
735c6b
-                if (qemuSnapshotDiscardExternal(vm, externalData) < 0)
735c6b
+                if (qemuSnapshotDiscardExternal(vm, snap, externalData) < 0)
735c6b
                     return -1;
735c6b
             } else {
735c6b
                 if (qemuDomainSnapshotForEachQcow2(driver, def, snap, "-d", true) < 0)
735c6b
@@ -2894,7 +2904,7 @@ qemuSnapshotDiscardImpl(virQEMUDriver *driver,
735c6b
             }
735c6b
         } else {
735c6b
             if (virDomainSnapshotIsExternal(snap)) {
735c6b
-                if (qemuSnapshotDiscardExternal(vm, externalData) < 0)
735c6b
+                if (qemuSnapshotDiscardExternal(vm, snap, externalData) < 0)
735c6b
                     return -1;
735c6b
             } else {
735c6b
                 /* Similarly as internal snapshot creation we would use a regular job
735c6b
-- 
735c6b
2.39.1
735c6b