Blame 0235-qemu-file-fsync-a-writable-stdio-QEMUFile.patch
|
Alon Levy |
408bdb5 |
From 1b98be7980ca1ac4a5ea1b140e09594c74824204 Mon Sep 17 00:00:00 2001
|
|
Alon Levy |
408bdb5 |
From: Paolo Bonzini <pbonzini@redhat.com>
|
|
Alon Levy |
408bdb5 |
Date: Fri, 22 Feb 2013 17:36:37 +0100
|
|
Alon Levy |
408bdb5 |
Subject: [PATCH 235/246] qemu-file: fsync a writable stdio QEMUFile
|
|
Alon Levy |
408bdb5 |
|
|
Alon Levy |
408bdb5 |
This is what fd_close does. Prepare for switching to a QEMUFile.
|
|
Alon Levy |
408bdb5 |
|
|
Alon Levy |
408bdb5 |
Reviewed-by: Orit Wasserman <owasserm@redhat.com>
|
|
Alon Levy |
408bdb5 |
Reviewed-by: Juan Quintela <quintela@redhat.com>
|
|
Alon Levy |
408bdb5 |
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
Alon Levy |
408bdb5 |
Signed-off-by: Juan Quintela <quintela@redhat.com>
|
|
Alon Levy |
408bdb5 |
---
|
|
Alon Levy |
408bdb5 |
savevm.c | 18 ++++++++++++++++++
|
|
Alon Levy |
408bdb5 |
1 file changed, 18 insertions(+)
|
|
Alon Levy |
408bdb5 |
|
|
Alon Levy |
408bdb5 |
diff --git a/savevm.c b/savevm.c
|
|
Alon Levy |
408bdb5 |
index 38699de..1d49fde 100644
|
|
Alon Levy |
408bdb5 |
--- a/savevm.c
|
|
Alon Levy |
408bdb5 |
+++ b/savevm.c
|
|
Alon Levy |
408bdb5 |
@@ -256,6 +256,24 @@ static int stdio_fclose(void *opaque)
|
|
Alon Levy |
408bdb5 |
{
|
|
Alon Levy |
408bdb5 |
QEMUFileStdio *s = opaque;
|
|
Alon Levy |
408bdb5 |
int ret = 0;
|
|
Alon Levy |
408bdb5 |
+
|
|
Alon Levy |
408bdb5 |
+ if (s->file->ops->put_buffer) {
|
|
Alon Levy |
408bdb5 |
+ int fd = fileno(s->stdio_file);
|
|
Alon Levy |
408bdb5 |
+ struct stat st;
|
|
Alon Levy |
408bdb5 |
+
|
|
Alon Levy |
408bdb5 |
+ ret = fstat(fd, &st);
|
|
Alon Levy |
408bdb5 |
+ if (ret == 0 && S_ISREG(st.st_mode)) {
|
|
Alon Levy |
408bdb5 |
+ /*
|
|
Alon Levy |
408bdb5 |
+ * If the file handle is a regular file make sure the
|
|
Alon Levy |
408bdb5 |
+ * data is flushed to disk before signaling success.
|
|
Alon Levy |
408bdb5 |
+ */
|
|
Alon Levy |
408bdb5 |
+ ret = fsync(fd);
|
|
Alon Levy |
408bdb5 |
+ if (ret != 0) {
|
|
Alon Levy |
408bdb5 |
+ ret = -errno;
|
|
Alon Levy |
408bdb5 |
+ return ret;
|
|
Alon Levy |
408bdb5 |
+ }
|
|
Alon Levy |
408bdb5 |
+ }
|
|
Alon Levy |
408bdb5 |
+ }
|
|
Alon Levy |
408bdb5 |
if (fclose(s->stdio_file) == EOF) {
|
|
Alon Levy |
408bdb5 |
ret = -errno;
|
|
Alon Levy |
408bdb5 |
}
|
|
Alon Levy |
408bdb5 |
--
|
|
Alon Levy |
408bdb5 |
1.8.2.1
|
|
Alon Levy |
408bdb5 |
|