]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: checkpoint: Extract and export rollback of checkpoint metadata storing
authorPeter Krempa <pkrempa@redhat.com>
Mon, 6 Jan 2020 14:03:56 +0000 (15:03 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 7 Jan 2020 14:19:58 +0000 (15:19 +0100)
If we are certain that the checkpoint creation failed we remove the
metadata from the list. To allow reusing this in the backup code add a
new helper and export it.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
src/qemu/qemu_checkpoint.c
src/qemu/qemu_checkpoint.h

index 97bc97bb8eabae873b57e584ffdcaa4d4c57d876..2fa5c1ae00c8b0ad63ea3d81c84d923926dddf27 100644 (file)
@@ -400,6 +400,24 @@ qemuCheckpointCreateCommon(virQEMUDriverPtr driver,
 }
 
 
+/**
+ * qemuCheckpointRollbackMetadata:
+ * @vm: domain object
+ * @chk: checkpoint object
+ *
+ * If @chk is not null remove the @chk object from the list of checkpoints of @vm.
+ */
+void
+qemuCheckpointRollbackMetadata(virDomainObjPtr vm,
+                               virDomainMomentObjPtr chk)
+{
+    if (!chk)
+        return;
+
+    virDomainCheckpointObjListRemove(vm->checkpoints, chk);
+}
+
+
 static virDomainMomentObjPtr
 qemuCheckpointCreate(virQEMUDriverPtr driver,
                      virDomainObjPtr vm,
@@ -415,7 +433,7 @@ qemuCheckpointCreate(virQEMUDriverPtr driver,
     qemuDomainObjEnterMonitor(driver, vm);
     rc = qemuMonitorTransaction(qemuDomainGetMonitor(vm), &actions);
     if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) {
-        virDomainCheckpointObjListRemove(vm->checkpoints, chk);
+        qemuCheckpointRollbackMetadata(vm, chk);
         return NULL;
     }
 
@@ -441,7 +459,7 @@ qemuCheckpointCreateFinalize(virQEMUDriverPtr driver,
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("unable to save metadata for checkpoint %s"),
                        chk->def->name);
-        virDomainCheckpointObjListRemove(vm->checkpoints, chk);
+        qemuCheckpointRollbackMetadata(vm, chk);
         return -1;
     }
 
index 00548beec9299cca189ad36eb50519002ff67ff5..eb85611ea686ec7615d08c67863f3402f1062e53 100644 (file)
@@ -67,3 +67,7 @@ qemuCheckpointCreateFinalize(virQEMUDriverPtr driver,
                              virQEMUDriverConfigPtr cfg,
                              virDomainMomentObjPtr chk,
                              bool update_current);
+
+void
+qemuCheckpointRollbackMetadata(virDomainObjPtr vm,
+                               virDomainMomentObjPtr chk);