[libvirt RFC 09/24] qemu_snapshot: refactor qemuSnapshotDelete

Pavel Hrdina posted 24 patches 3 years, 5 months ago
[libvirt RFC 09/24] qemu_snapshot: refactor qemuSnapshotDelete
Posted by Pavel Hrdina 3 years, 5 months ago
Move code around to make it clear what is called when deleting single
snapshot or children snapshots.

Signed-off-by: Pavel Hrdina <phrdina@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 6033deafed..c1c67ac445 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.37.2
Re: [libvirt RFC 09/24] qemu_snapshot: refactor qemuSnapshotDelete
Posted by Peter Krempa 3 years, 5 months ago
On Tue, Aug 23, 2022 at 18:32:12 +0200, Pavel Hrdina wrote:
> Move code around to make it clear what is called when deleting single
> snapshot or children snapshots.
> 
> Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
> ---
>  src/qemu/qemu_snapshot.c | 37 ++++++++++++++++++++-----------------
>  1 file changed, 20 insertions(+), 17 deletions(-)

Reviewed-by: Peter Krempa <pkrempa@redhat.com>