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

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



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


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