Signed-off-by: Pavel Hrdina <phrdina(a)redhat.com>
---
src/qemu/qemu_snapshot.c | 65 ++++++++++++++++++++--------------------
1 file changed, 32 insertions(+), 33 deletions(-)
diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c
index 787186605f..591d6db39b 100644
--- a/src/qemu/qemu_snapshot.c
+++ b/src/qemu/qemu_snapshot.c
@@ -2288,6 +2288,8 @@ qemuSnapshotDiscardMetadata(virDomainObj *vm,
bool update_parent)
{
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
+ g_autofree char *snapFile = NULL;
+ virDomainMomentObj *parentsnap = NULL;
if (update_parent && snap->nchildren) {
virQEMUMomentReparent rep;
@@ -2306,6 +2308,36 @@ qemuSnapshotDiscardMetadata(virDomainObj *vm,
virDomainMomentMoveChildren(snap, snap->parent);
}
+ snapFile = g_strdup_printf("%s/%s/%s.xml", cfg->snapshotDir,
vm->def->name,
+ snap->def->name);
+
+ if (snap == virDomainSnapshotGetCurrent(vm->snapshots)) {
+ virDomainSnapshotSetCurrent(vm->snapshots, NULL);
+ if (update_parent && snap->def->parent_name) {
+ parentsnap = virDomainSnapshotFindByName(vm->snapshots,
+ snap->def->parent_name);
+ if (!parentsnap) {
+ VIR_WARN("missing parent snapshot matching name '%s'",
+ snap->def->parent_name);
+ } else {
+ virDomainSnapshotSetCurrent(vm->snapshots, parentsnap);
+ if (qemuDomainSnapshotWriteMetadata(vm, parentsnap,
+ driver->xmlopt,
+ cfg->snapshotDir) < 0) {
+ VIR_WARN("failed to set parent snapshot '%s' as
current",
+ snap->def->parent_name);
+ virDomainSnapshotSetCurrent(vm->snapshots, NULL);
+ }
+ }
+ }
+ }
+
+ if (unlink(snapFile) < 0)
+ VIR_WARN("Failed to unlink %s", snapFile);
+ if (update_parent)
+ virDomainMomentDropParent(snap);
+ virDomainSnapshotObjListRemove(vm->snapshots, snap);
+
return 0;
}
@@ -2318,10 +2350,7 @@ qemuSnapshotDiscard(virQEMUDriver *driver,
bool update_parent,
bool metadata_only)
{
- g_autofree char *snapFile = NULL;
qemuDomainObjPrivate *priv;
- virDomainMomentObj *parentsnap = NULL;
- g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
if (!metadata_only) {
if (!virDomainObjIsActive(vm)) {
@@ -2355,36 +2384,6 @@ qemuSnapshotDiscard(virQEMUDriver *driver,
if (qemuSnapshotDiscardMetadata(vm, snap, driver, update_parent) < 0)
return -1;
- snapFile = g_strdup_printf("%s/%s/%s.xml", cfg->snapshotDir,
vm->def->name,
- snap->def->name);
-
- if (snap == virDomainSnapshotGetCurrent(vm->snapshots)) {
- virDomainSnapshotSetCurrent(vm->snapshots, NULL);
- if (update_parent && snap->def->parent_name) {
- parentsnap = virDomainSnapshotFindByName(vm->snapshots,
- snap->def->parent_name);
- if (!parentsnap) {
- VIR_WARN("missing parent snapshot matching name '%s'",
- snap->def->parent_name);
- } else {
- virDomainSnapshotSetCurrent(vm->snapshots, parentsnap);
- if (qemuDomainSnapshotWriteMetadata(vm, parentsnap,
- driver->xmlopt,
- cfg->snapshotDir) < 0) {
- VIR_WARN("failed to set parent snapshot '%s' as
current",
- snap->def->parent_name);
- virDomainSnapshotSetCurrent(vm->snapshots, NULL);
- }
- }
- }
- }
-
- if (unlink(snapFile) < 0)
- VIR_WARN("Failed to unlink %s", snapFile);
- if (update_parent)
- virDomainMomentDropParent(snap);
- virDomainSnapshotObjListRemove(vm->snapshots, snap);
-
return 0;
}
--
2.37.2