6d3351
From 81bbd5e5673d2ed1b10b3a54876ed7945cd5f97c Mon Sep 17 00:00:00 2001
6d3351
Message-Id: <81bbd5e5673d2ed1b10b3a54876ed7945cd5f97c@dist-git>
6d3351
From: Jiri Denemark <jdenemar@redhat.com>
6d3351
Date: Tue, 6 Jun 2017 22:49:11 +0200
6d3351
Subject: [PATCH] qemu: Introduce virQEMUSaveDataFinish
6d3351
6d3351
The function is supposed to update the save image header after a
6d3351
successful migration to the save image file.
6d3351
6d3351
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
6d3351
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
6d3351
(cherry picked from commit ec986bc5727b88b0631236ad0cdecb0a8568d5cd)
6d3351
6d3351
https://bugzilla.redhat.com/show_bug.cgi?id=1441662
6d3351
6d3351
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
6d3351
---
6d3351
 src/qemu/qemu_driver.c | 34 +++++++++++++++++++++-------------
6d3351
 1 file changed, 21 insertions(+), 13 deletions(-)
6d3351
6d3351
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
6d3351
index 4a05793339..a0b607b419 100644
6d3351
--- a/src/qemu/qemu_driver.c
6d3351
+++ b/src/qemu/qemu_driver.c
6d3351
@@ -2882,6 +2882,25 @@ qemuDomainSaveHeader(int fd, const char *path, const char *xml,
6d3351
 }
6d3351
 
6d3351
 
6d3351
+static int
6d3351
+virQEMUSaveDataFinish(virQEMUSaveHeaderPtr header,
6d3351
+                      int *fd,
6d3351
+                      const char *path)
6d3351
+{
6d3351
+    memcpy(header->magic, QEMU_SAVE_MAGIC, sizeof(header->magic));
6d3351
+
6d3351
+    if (safewrite(*fd, header, sizeof(*header)) != sizeof(*header) ||
6d3351
+        VIR_CLOSE(*fd) < 0) {
6d3351
+        virReportSystemError(errno,
6d3351
+                             _("failed to write header to domain save file '%s'"),
6d3351
+                             path);
6d3351
+        return -1;
6d3351
+    }
6d3351
+
6d3351
+    return 0;
6d3351
+}
6d3351
+
6d3351
+
6d3351
 static virCommandPtr
6d3351
 qemuCompressGetCommand(virQEMUSaveFormat compression)
6d3351
 {
6d3351
@@ -3135,21 +3154,10 @@ qemuDomainSaveMemory(virQEMUDriverPtr driver,
6d3351
     if (virFileWrapperFdClose(wrapperFd) < 0)
6d3351
         goto cleanup;
6d3351
 
6d3351
-    if ((fd = qemuOpenFile(driver, vm, path, O_WRONLY, NULL, NULL)) < 0)
6d3351
+    if ((fd = qemuOpenFile(driver, vm, path, O_WRONLY, NULL, NULL)) < 0 ||
6d3351
+        virQEMUSaveDataFinish(header, &fd, path) < 0)
6d3351
         goto cleanup;
6d3351
 
6d3351
-    memcpy(header->magic, QEMU_SAVE_MAGIC, sizeof(header->magic));
6d3351
-
6d3351
-    if (safewrite(fd, &header, sizeof(header)) != sizeof(header)) {
6d3351
-        virReportSystemError(errno, _("unable to write %s"), path);
6d3351
-        goto cleanup;
6d3351
-    }
6d3351
-
6d3351
-    if (VIR_CLOSE(fd) < 0) {
6d3351
-        virReportSystemError(errno, _("unable to close %s"), path);
6d3351
-        goto cleanup;
6d3351
-    }
6d3351
-
6d3351
     ret = 0;
6d3351
 
6d3351
  cleanup:
6d3351
-- 
6d3351
2.13.1
6d3351