diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index b70961f779..6e47c8af12 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -4040,11 +4040,6 @@ processGuestPanicEvent(virQEMUDriverPtr driver, VIR_WARN("Unable to release lease on %s", vm->def->name); VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState)); - if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm) < 0) { - VIR_WARN("Unable to save status on vm %s after state change", - vm->def->name); - } - switch (action) { case VIR_DOMAIN_LIFECYCLE_CRASH_COREDUMP_DESTROY: if (doCoreDumpToAutoDumpPath(driver, vm, VIR_DUMP_MEMORY_ONLY) < 0) { @@ -4102,6 +4097,11 @@ processGuestPanicEvent(virQEMUDriverPtr driver, } cleanup: + if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm) < 0) { + VIR_WARN("Unable to save status on vm %s after state change", + vm->def->name); + } + virObjectUnref(cfg); } diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 002bd3239d..24e5f0fded 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -529,6 +529,7 @@ qemuProcessHandleReset(qemuMonitorPtr mon ATTRIBUTE_UNUSED, virQEMUDriverPtr driver = opaque; virObjectEventPtr event; qemuDomainObjPrivatePtr priv; + virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); virObjectLock(vm); @@ -536,12 +537,20 @@ qemuProcessHandleReset(qemuMonitorPtr mon ATTRIBUTE_UNUSED, priv = vm->privateData; if (priv->agent) qemuAgentNotifyEvent(priv->agent, QEMU_AGENT_EVENT_RESET); + /* Clear some domain runtime information. For instance, + * fsfreeze won't survive domain reset. This, however, + * required the domain status file to be rewritten onto disk. */ + priv->quiesced = false; + + if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm) < 0) + VIR_WARN("Failed to save status on vm %s", vm->def->name); virObjectUnlock(vm); if (event) qemuDomainEventQueue(driver, event); + virObjectUnref(cfg); return 0; } @@ -4849,6 +4858,7 @@ void qemuProcessStop(virQEMUDriverPtr driver, virPortAllocatorRelease(driver->migrationPorts, priv->nbdPort); priv->nbdPort = 0; + priv->quiesced = false; if (priv->agent) { qemuAgentClose(priv->agent);