The function is supposed to update the save image header after a
successful migration to the save image file.
Signed-off-by: Jiri Denemark <jdenemar(a)redhat.com>
---
Notes:
Version 2:
- new patch (separated from the original 06/15)
src/qemu/qemu_driver.c | 34 +++++++++++++++++++++-------------
1 file changed, 21 insertions(+), 13 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index be6bedd6a..b51a41641 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -2877,6 +2877,25 @@ qemuDomainSaveHeader(int fd, const char *path, const char *xml,
}
+static int
+virQEMUSaveDataFinish(virQEMUSaveHeaderPtr header,
+ int *fd,
+ const char *path)
+{
+ memcpy(header->magic, QEMU_SAVE_MAGIC, sizeof(header->magic));
+
+ if (safewrite(*fd, header, sizeof(*header)) != sizeof(*header) ||
+ VIR_CLOSE(*fd) < 0) {
+ virReportSystemError(errno,
+ _("failed to write header to domain save file
'%s'"),
+ path);
+ return -1;
+ }
+
+ return 0;
+}
+
+
static virCommandPtr
qemuCompressGetCommand(virQEMUSaveFormat compression)
{
@@ -3149,21 +3168,10 @@ qemuDomainSaveMemory(virQEMUDriverPtr driver,
if (virFileWrapperFdClose(wrapperFd) < 0)
goto cleanup;
- if ((fd = qemuOpenFile(driver, vm, path, O_WRONLY, NULL, NULL)) < 0)
+ if ((fd = qemuOpenFile(driver, vm, path, O_WRONLY, NULL, NULL)) < 0 ||
+ virQEMUSaveDataFinish(header, &fd, path) < 0)
goto cleanup;
- memcpy(header->magic, QEMU_SAVE_MAGIC, sizeof(header->magic));
-
- if (safewrite(fd, &header, sizeof(header)) != sizeof(header)) {
- virReportSystemError(errno, _("unable to write %s"), path);
- goto cleanup;
- }
-
- if (VIR_CLOSE(fd) < 0) {
- virReportSystemError(errno, _("unable to close %s"), path);
- goto cleanup;
- }
-
ret = 0;
cleanup:
--
2.13.0