]> xenbits.xensource.com Git - libvirt.git/commitdiff
snapshot: fix logic bug in qemu undefine
authorEric Blake <eblake@redhat.com>
Wed, 21 Sep 2011 19:08:50 +0000 (13:08 -0600)
committerDaniel Veillard <veillard@redhat.com>
Thu, 22 Sep 2011 05:43:21 +0000 (13:43 +0800)
Commit 19f8c98 introduced VIR_DOMAIN_UNDEFINE_SNAPSHOTS_METADATA,
with the intent that omitting the flag makes undefine fail, and
including the flag deletes metadata.  But it used the wrong logic.
Also, hoist the transient domain sooner, so that we don't
accidentally remove metadata of a transient domain.

* src/qemu/qemu_driver.c (qemuDomainUndefineFlags): Check correct
flag value.

src/qemu/qemu_driver.c

index 67c43ab203ced2c2b1eb91cb875a413a5386108c..4a24019019da70c08145fd3dc623ee4ad7be04e3 100644 (file)
@@ -5095,7 +5095,7 @@ cleanup:
 
 static int
 qemuDomainUndefineFlags(virDomainPtr dom,
-                         unsigned int flags)
+                        unsigned int flags)
 {
     struct qemud_driver *driver = dom->conn->privateData;
     virDomainObjPtr vm;
@@ -5118,11 +5118,17 @@ qemuDomainUndefineFlags(virDomainPtr dom,
         goto cleanup;
     }
 
+    if (!vm->persistent) {
+        qemuReportError(VIR_ERR_OPERATION_INVALID,
+                        "%s", _("cannot undefine transient domain"));
+        goto cleanup;
+    }
+
     if (!virDomainObjIsActive(vm) &&
         (nsnapshots = virDomainSnapshotObjListNum(&vm->snapshots, 0))) {
         struct snap_remove rem;
 
-        if (flags & VIR_DOMAIN_UNDEFINE_SNAPSHOTS_METADATA) {
+        if (!(flags & VIR_DOMAIN_UNDEFINE_SNAPSHOTS_METADATA)) {
             qemuReportError(VIR_ERR_OPERATION_INVALID,
                             _("cannot delete inactive domain with %d "
                               "snapshots"),
@@ -5139,12 +5145,6 @@ qemuDomainUndefineFlags(virDomainPtr dom,
             goto cleanup;
     }
 
-    if (!vm->persistent) {
-        qemuReportError(VIR_ERR_OPERATION_INVALID,
-                        "%s", _("cannot undefine transient domain"));
-        goto cleanup;
-    }
-
     name = qemuDomainManagedSavePath(driver, vm);
     if (name == NULL)
         goto cleanup;