diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c index b8416808b3..5cdcbc6290 100644 --- a/src/qemu/qemu_snapshot.c +++ b/src/qemu/qemu_snapshot.c @@ -2684,9 +2684,11 @@ qemuSnapshotSetInvalid(virDomainObj *vm, static int qemuSnapshotDiscardExternal(virDomainObj *vm, + virDomainMomentObj *snap, GSList *externalData) { GSList *cur = NULL; + virDomainSnapshotDef *snapdef = virDomainSnapshotObjGetDef(snap); for (cur = externalData; cur; cur = g_slist_next(cur)) { qemuSnapshotDeleteExternalData *data = cur->data; @@ -2756,6 +2758,14 @@ qemuSnapshotDiscardExternal(virDomainObj *vm, goto error; } + if (snapdef->memory == VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL && + snapdef->memorysnapshotfile) { + if (unlink(snapdef->memorysnapshotfile) < 0) { + VIR_WARN("failed to remove memory snapshot '%s'", + snapdef->memorysnapshotfile); + } + } + return 0; error: @@ -2886,7 +2896,7 @@ qemuSnapshotDiscardImpl(virQEMUDriver *driver, } if (virDomainSnapshotIsExternal(snap)) { - if (qemuSnapshotDiscardExternal(vm, externalData) < 0) + if (qemuSnapshotDiscardExternal(vm, snap, externalData) < 0) return -1; } else { if (qemuDomainSnapshotForEachQcow2(driver, def, snap, "-d", true) < 0) @@ -2894,7 +2904,7 @@ qemuSnapshotDiscardImpl(virQEMUDriver *driver, } } else { if (virDomainSnapshotIsExternal(snap)) { - if (qemuSnapshotDiscardExternal(vm, externalData) < 0) + if (qemuSnapshotDiscardExternal(vm, snap, externalData) < 0) return -1; } else { /* Similarly as internal snapshot creation we would use a regular job