[libvirt PATCH v2 13/31] qemu_snapshot: refactor qemuSnapshotDelete

Pavel Hrdina phrdina at redhat.com
Thu Jan 5 11:46:49 UTC 2023


Move code around to make it clear what is called when deleting single
snapshot or children snapshots.

Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
Reviewed-by: Peter Krempa <pkrempa at redhat.com>
---
 src/qemu/qemu_snapshot.c | 37 ++++++++++++++++++++-----------------
 1 file changed, 20 insertions(+), 17 deletions(-)

diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c
index d7983c134f..e9bb5abee2 100644
--- a/src/qemu/qemu_snapshot.c
+++ b/src/qemu/qemu_snapshot.c
@@ -2350,25 +2350,28 @@ qemuSnapshotDelete(virDomainObj *vm,
                 }
             }
         }
-    } else if (snap->nchildren) {
-        rep.dir = cfg->snapshotDir;
-        rep.parent = snap->parent;
-        rep.vm = vm;
-        rep.err = 0;
-        rep.xmlopt = driver->xmlopt;
-        rep.writeMetadata = qemuDomainSnapshotWriteMetadata;
-        virDomainMomentForEachChild(snap,
-                                    qemuSnapshotChildrenReparent,
-                                    &rep);
-        if (rep.err < 0)
-            goto endjob;
-        virDomainMomentMoveChildren(snap, snap->parent);
-    }
 
-    if (flags & VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN_ONLY) {
-        virDomainMomentDropChildren(snap);
-        ret = 0;
+        if (flags & VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN_ONLY) {
+            virDomainMomentDropChildren(snap);
+            ret = 0;
+        } else {
+            ret = qemuDomainSnapshotDiscard(driver, vm, snap, true, metadata_only);
+        }
     } else {
+        if (snap->nchildren) {
+            rep.dir = cfg->snapshotDir;
+            rep.parent = snap->parent;
+            rep.vm = vm;
+            rep.err = 0;
+            rep.xmlopt = driver->xmlopt;
+            rep.writeMetadata = qemuDomainSnapshotWriteMetadata;
+            virDomainMomentForEachChild(snap,
+                                        qemuSnapshotChildrenReparent,
+                                        &rep);
+            if (rep.err < 0)
+                goto endjob;
+            virDomainMomentMoveChildren(snap, snap->parent);
+        }
         ret = qemuDomainSnapshotDiscard(driver, vm, snap, true, metadata_only);
     }
 
-- 
2.39.0



More information about the libvir-list mailing list