9119d9
From 8e7c6d9bb776c793c352d94952079e96aedf9599 Mon Sep 17 00:00:00 2001
9119d9
Message-Id: <8e7c6d9bb776c793c352d94952079e96aedf9599@dist-git>
9119d9
From: Michal Privoznik <mprivozn@redhat.com>
9119d9
Date: Tue, 18 Nov 2014 13:33:38 +0100
9119d9
Subject: [PATCH] qemu: Update fsfreeze status on domain state transitions
9119d9
9119d9
https://bugzilla.redhat.com/show_bug.cgi?id=1160084
9119d9
9119d9
As of b6d4dad1 (1.2.5) libvirt keeps track if domain disks have been
9119d9
frozen. However, this falls into that set of information which don't
9119d9
survive domain restart. Therefore, we need to clear the flag upon some
9119d9
state transitions. Moreover, once we clear the flag we must update the
9119d9
status file too.
9119d9
9119d9
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
9119d9
(cherry picked from commit 6ea54769ba1816b382698c4311588d7d1a9cd095)
9119d9
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
9119d9
---
9119d9
 src/qemu/qemu_driver.c  | 10 +++++-----
9119d9
 src/qemu/qemu_process.c | 10 ++++++++++
9119d9
 2 files changed, 15 insertions(+), 5 deletions(-)
9119d9
9119d9
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
9119d9
index 6ed830c..ea45d89 100644
9119d9
--- a/src/qemu/qemu_driver.c
9119d9
+++ b/src/qemu/qemu_driver.c
9119d9
@@ -4041,11 +4041,6 @@ processGuestPanicEvent(virQEMUDriverPtr driver,
9119d9
         VIR_WARN("Unable to release lease on %s", vm->def->name);
9119d9
     VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState));
9119d9
 
9119d9
-    if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm) < 0) {
9119d9
-        VIR_WARN("Unable to save status on vm %s after state change",
9119d9
-                 vm->def->name);
9119d9
-     }
9119d9
-
9119d9
     switch (action) {
9119d9
     case VIR_DOMAIN_LIFECYCLE_CRASH_COREDUMP_DESTROY:
9119d9
         if (doCoreDumpToAutoDumpPath(driver, vm, VIR_DUMP_MEMORY_ONLY) < 0) {
9119d9
@@ -4103,6 +4098,11 @@ processGuestPanicEvent(virQEMUDriverPtr driver,
9119d9
     }
9119d9
 
9119d9
  cleanup:
9119d9
+    if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm) < 0) {
9119d9
+        VIR_WARN("Unable to save status on vm %s after state change",
9119d9
+                 vm->def->name);
9119d9
+     }
9119d9
+
9119d9
     virObjectUnref(cfg);
9119d9
 }
9119d9
 
9119d9
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
9119d9
index 9c640f0..3eb1036 100644
9119d9
--- a/src/qemu/qemu_process.c
9119d9
+++ b/src/qemu/qemu_process.c
9119d9
@@ -529,6 +529,7 @@ qemuProcessHandleReset(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
9119d9
     virQEMUDriverPtr driver = opaque;
9119d9
     virObjectEventPtr event;
9119d9
     qemuDomainObjPrivatePtr priv;
9119d9
+    virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
9119d9
 
9119d9
     virObjectLock(vm);
9119d9
 
9119d9
@@ -536,12 +537,20 @@ qemuProcessHandleReset(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
9119d9
     priv = vm->privateData;
9119d9
     if (priv->agent)
9119d9
         qemuAgentNotifyEvent(priv->agent, QEMU_AGENT_EVENT_RESET);
9119d9
+    /* Clear some domain runtime information. For instance,
9119d9
+     * fsfreeze won't survive domain reset. This, however,
9119d9
+     * required the domain status file to be rewritten onto disk. */
9119d9
+    priv->quiesced = false;
9119d9
+
9119d9
+    if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm) < 0)
9119d9
+        VIR_WARN("Failed to save status on vm %s", vm->def->name);
9119d9
 
9119d9
     virObjectUnlock(vm);
9119d9
 
9119d9
     if (event)
9119d9
         qemuDomainEventQueue(driver, event);
9119d9
 
9119d9
+    virObjectUnref(cfg);
9119d9
     return 0;
9119d9
 }
9119d9
 
9119d9
@@ -4844,6 +4853,7 @@ void qemuProcessStop(virQEMUDriverPtr driver,
9119d9
 
9119d9
     virPortAllocatorRelease(driver->migrationPorts, priv->nbdPort);
9119d9
     priv->nbdPort = 0;
9119d9
+    priv->quiesced = false;
9119d9
 
9119d9
     if (priv->agent) {
9119d9
         qemuAgentClose(priv->agent);
9119d9
-- 
9119d9
2.1.3
9119d9