[libvirt] [PATCH 2/2] qemu: snapshot: Remove memory image if external checkpoint fails

Peter Krempa pkrempa at redhat.com
Tue Dec 11 11:10:52 UTC 2012


When the disk snapshot part of an external system checkpoint fails the
memory image is retained. This patch adds code to remove the image in
such case.
---
 src/qemu/qemu_driver.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 0a801f3..acbb556 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -11368,6 +11368,7 @@ qemuDomainSnapshotCreateActiveExternal(virConnectPtr conn,
     qemuDomainObjPrivatePtr priv = vm->privateData;
     char *xml = NULL;
     bool memory = snap->def->memory == VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL;
+    bool memory_unlink = false;
     bool atomic = !!(flags & VIR_DOMAIN_SNAPSHOT_CREATE_ATOMIC);
     bool transaction = qemuCapsGet(priv->caps, QEMU_CAPS_TRANSACTION);
     int thaw = 0; /* 1 if freeze succeeded, -1 if freeze failed */
@@ -11439,6 +11440,9 @@ qemuDomainSnapshotCreateActiveExternal(virConnectPtr conn,
                                         QEMU_ASYNC_JOB_SNAPSHOT)) < 0)
             goto endjob;

+        /* the memory image was created, remove it on errors */
+        memory_unlink = true;
+
         /* forbid any further manipulation */
         qemuDomainObjSetAsyncJobMask(vm, DEFAULT_JOB_MASK);
     }
@@ -11509,6 +11513,8 @@ endjob:

 cleanup:
     VIR_FREE(xml);
+    if (memory_unlink && ret < 0)
+        unlink(snap->def->file);

     return ret;
 }
-- 
1.8.0




More information about the libvir-list mailing list