[libvirt PATCH 1/2] qemu_snapshot: create: refactor external snapshot detection

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Introduce new function qemuSnapshotCreateUseExternal() that will return
true if we will use external snapshots as default location.

Signed-off-by: Pavel Hrdina <phrdina@xxxxxxxxxx>
---
 src/qemu/qemu_snapshot.c | 34 +++++++++++++++++++++++++---------
 1 file changed, 25 insertions(+), 9 deletions(-)

diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c
index 73ff533827..ab7b47319b 100644
--- a/src/qemu/qemu_snapshot.c
+++ b/src/qemu/qemu_snapshot.c
@@ -1576,6 +1576,20 @@ qemuSnapshotCreateXMLValidateDef(virDomainObj *vm,
 }
 
 
+static bool
+qemuSnapshotCreateUseExternal(virDomainSnapshotDef *def,
+                              unsigned int flags)
+{
+    if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY)
+        return true;
+
+    if (def->memory == VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL)
+        return true;
+
+    return false;
+}
+
+
 static int
 qemuSnapshotCreateAlignDisks(virDomainObj *vm,
                              virDomainSnapshotDef *def,
@@ -1584,7 +1598,7 @@ qemuSnapshotCreateAlignDisks(virDomainObj *vm,
 {
     g_autofree char *xml = NULL;
     qemuDomainObjPrivate *priv = vm->privateData;
-    virDomainSnapshotLocation align_location = VIR_DOMAIN_SNAPSHOT_LOCATION_INTERNAL;
+    virDomainSnapshotLocation align_location = VIR_DOMAIN_SNAPSHOT_LOCATION_DEFAULT;
 
     /* Easiest way to clone inactive portion of vm->def is via
      * conversion in and back out of xml.  */
@@ -1604,17 +1618,19 @@ qemuSnapshotCreateAlignDisks(virDomainObj *vm,
             return -1;
     }
 
-    if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY) {
+    if (qemuSnapshotCreateUseExternal(def, flags)) {
         align_location = VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL;
-        if (virDomainObjIsActive(vm))
-            def->state = VIR_DOMAIN_SNAPSHOT_DISK_SNAPSHOT;
-        else
-            def->state = VIR_DOMAIN_SNAPSHOT_SHUTOFF;
-        def->memory = VIR_DOMAIN_SNAPSHOT_LOCATION_NO;
-    } else if (def->memory == VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL) {
         def->state = virDomainObjGetState(vm, NULL);
-        align_location = VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL;
+
+        if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY) {
+            if (virDomainObjIsActive(vm))
+                def->state = VIR_DOMAIN_SNAPSHOT_DISK_SNAPSHOT;
+            else
+                def->state = VIR_DOMAIN_SNAPSHOT_SHUTOFF;
+            def->memory = VIR_DOMAIN_SNAPSHOT_LOCATION_NO;
+        }
     } else {
+        align_location = VIR_DOMAIN_SNAPSHOT_LOCATION_INTERNAL;
         def->state = virDomainObjGetState(vm, NULL);
 
         if (virDomainObjIsActive(vm) &&
-- 
2.43.0
_______________________________________________
Devel mailing list -- devel@xxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxx




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux