]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: snapshot: Fix return value of external checkpoint with no disks
authorPeter Krempa <pkrempa@redhat.com>
Tue, 20 May 2014 13:22:14 +0000 (15:22 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 20 May 2014 17:28:10 +0000 (19:28 +0200)
When doing an external checkpoint of a VM with no disk selected we'd
return failure but not set error code. This was a result of ret not
being set to 0 during walking of the disk array.

Rework early failure checking and set the error code to success before
iterating the array of disks so that we return success if no disks are
snapshotted.

Fixes the following symptom (or without --diskspec for diskless VMs)

 $ virsh snapshot-create-as snapshot-test  --memspec /tmp/asdf --diskspec hda,snapshot=no
 error: An error occurred, but the cause is unknown

src/qemu/qemu_driver.c

index 9dbfc0798f7582632e4bb556af8b3df150c2d728..6fda50d7fca5eedf320bca6eb8d3e89e80acfbe1 100644 (file)
@@ -13010,17 +13010,17 @@ qemuDomainSnapshotCreateDiskActive(virQEMUDriverPtr driver,
 {
     qemuDomainObjPrivatePtr priv = vm->privateData;
     virJSONValuePtr actions = NULL;
-    int ret = -1;
+    int ret = 0;
     size_t i;
     bool persist = false;
     bool reuse = (flags & VIR_DOMAIN_SNAPSHOT_CREATE_REUSE_EXT) != 0;
-    virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
+    virQEMUDriverConfigPtr cfg = NULL;
     virErrorPtr orig_err = NULL;
 
     if (!virDomainObjIsActive(vm)) {
         virReportError(VIR_ERR_OPERATION_INVALID,
                        "%s", _("domain is not running"));
-        goto cleanup;
+        return -1;
     }
 
     if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_TRANSACTION)) {
@@ -13030,9 +13030,11 @@ qemuDomainSnapshotCreateDiskActive(virQEMUDriverPtr driver,
         virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
                        _("live disk snapshot not supported with this "
                          "QEMU binary"));
-        goto cleanup;
+        return -1;
     }
 
+    cfg = virQEMUDriverGetConfig(driver);
+
     /* No way to roll back if first disk succeeds but later disks
      * fail, unless we have transaction support.
      * Based on earlier qemuDomainSnapshotPrepare, all