]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu_snapshot: introduce qemuSnapshotDeleteValidate function
authorPavel Hrdina <phrdina@redhat.com>
Tue, 23 Aug 2022 11:04:54 +0000 (13:04 +0200)
committerPavel Hrdina <phrdina@redhat.com>
Mon, 9 Jan 2023 12:32:58 +0000 (13:32 +0100)
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
src/qemu/qemu_snapshot.c

index 359f0a3671c2780ee97e12311e0839e96ba19dda..2e0e4896f5a6aab71f4d9094399f52283b8228a3 100644 (file)
@@ -2482,6 +2482,33 @@ qemuSnapshotDeleteChildren(virDomainObj *vm,
 }
 
 
+static int
+qemuSnapshotDeleteValidate(virDomainMomentObj *snap,
+                           unsigned int flags)
+{
+    int external = 0;
+
+    if (!(flags & VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN_ONLY) &&
+        virDomainSnapshotIsExternal(snap))
+        external++;
+
+    if (flags & (VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN |
+                 VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN_ONLY))
+        virDomainMomentForEachDescendant(snap,
+                                         qemuSnapshotCountExternal,
+                                         &external);
+
+    if (external) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                       _("deletion of %d external disk snapshots not "
+                         "supported yet"), external);
+        return -1;
+    }
+
+    return 0;
+}
+
+
 int
 qemuSnapshotDelete(virDomainObj *vm,
                    virDomainSnapshotPtr snapshot,
@@ -2490,7 +2517,6 @@ qemuSnapshotDelete(virDomainObj *vm,
     int ret = -1;
     virDomainMomentObj *snap = NULL;
     bool metadata_only = !!(flags & VIR_DOMAIN_SNAPSHOT_DELETE_METADATA_ONLY);
-    int external = 0;
 
     virCheckFlags(VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN |
                   VIR_DOMAIN_SNAPSHOT_DELETE_METADATA_ONLY |
@@ -2503,20 +2529,8 @@ qemuSnapshotDelete(virDomainObj *vm,
         goto endjob;
 
     if (!metadata_only) {
-        if (!(flags & VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN_ONLY) &&
-            virDomainSnapshotIsExternal(snap))
-            external++;
-        if (flags & (VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN |
-                     VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN_ONLY))
-            virDomainMomentForEachDescendant(snap,
-                                             qemuSnapshotCountExternal,
-                                             &external);
-        if (external) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                           _("deletion of %d external disk snapshots not "
-                             "supported yet"), external);
+        if (qemuSnapshotDeleteValidate(snap, flags) < 0)
             goto endjob;
-        }
     }
 
     if (flags & (VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN |