From e6966fa79abe96edb9b5e9ca238b94f7495966c1 Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Wed, 21 Sep 2011 13:08:50 -0600 Subject: [PATCH] snapshot: fix logic bug in qemu undefine Commit 19f8c98 introduced VIR_DOMAIN_UNDEFINE_SNAPSHOTS_METADATA, with the intent that omitting the flag makes undefine fail, and including the flag deletes metadata. But it used the wrong logic. Also, hoist the transient domain sooner, so that we don't accidentally remove metadata of a transient domain. * src/qemu/qemu_driver.c (qemuDomainUndefineFlags): Check correct flag value. --- src/qemu/qemu_driver.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 67c43ab203..4a24019019 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -5095,7 +5095,7 @@ cleanup: static int qemuDomainUndefineFlags(virDomainPtr dom, - unsigned int flags) + unsigned int flags) { struct qemud_driver *driver = dom->conn->privateData; virDomainObjPtr vm; @@ -5118,11 +5118,17 @@ qemuDomainUndefineFlags(virDomainPtr dom, goto cleanup; } + if (!vm->persistent) { + qemuReportError(VIR_ERR_OPERATION_INVALID, + "%s", _("cannot undefine transient domain")); + goto cleanup; + } + if (!virDomainObjIsActive(vm) && (nsnapshots = virDomainSnapshotObjListNum(&vm->snapshots, 0))) { struct snap_remove rem; - if (flags & VIR_DOMAIN_UNDEFINE_SNAPSHOTS_METADATA) { + if (!(flags & VIR_DOMAIN_UNDEFINE_SNAPSHOTS_METADATA)) { qemuReportError(VIR_ERR_OPERATION_INVALID, _("cannot delete inactive domain with %d " "snapshots"), @@ -5139,12 +5145,6 @@ qemuDomainUndefineFlags(virDomainPtr dom, goto cleanup; } - if (!vm->persistent) { - qemuReportError(VIR_ERR_OPERATION_INVALID, - "%s", _("cannot undefine transient domain")); - goto cleanup; - } - name = qemuDomainManagedSavePath(driver, vm); if (name == NULL) goto cleanup;