}
+static void
+qemuSnapshotClearRevertdisks(virDomainMomentObj *current)
+{
+ virDomainSnapshotDef *curdef = NULL;
+
+ if (!current)
+ return;
+
+ curdef = virDomainSnapshotObjGetDef(current);
+
+ if (curdef->revertdisks) {
+ size_t i;
+
+ for (i = 0; i < curdef->nrevertdisks; i++)
+ virDomainSnapshotDiskDefClear(&curdef->revertdisks[i]);
+
+ g_clear_pointer(&curdef->revertdisks, g_free);
+ curdef->nrevertdisks = 0;
+ }
+}
+
+
static virDomainSnapshotPtr
qemuSnapshotRedefine(virDomainObj *vm,
virDomainPtr domain,
unsigned int flags)
{
virDomainMomentObj *snap = NULL;
+ virDomainMomentObj *current = virDomainSnapshotGetCurrent(vm->snapshots);
virDomainSnapshotPtr ret = NULL;
g_autoptr(virDomainSnapshotDef) snapdef = virObjectRef(snapdeftmp);
* makes sense, such as checking that qemu-img recognizes the
* snapshot name in at least one of the domain's disks? */
- if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_CURRENT)
+ if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_CURRENT) {
+ qemuSnapshotClearRevertdisks(current);
qemuSnapshotSetCurrent(vm, snap);
+ }
if (qemuSnapshotCreateWriteMetadata(vm, snap, driver, cfg) < 0)
goto error;
}
if (!tmpsnap) {
+ qemuSnapshotClearRevertdisks(current);
qemuSnapshotSetCurrent(vm, snap);
if (qemuSnapshotCreateWriteMetadata(vm, snap, driver, cfg) < 0)