From: Uri Lublin <[EMAIL PROTECTED]>

Instead of writing into a file with fork+exec, just open the file and
write the data. This solves a bug that sometimes not all the data was
kept in the state-file.

Signed-off-by: Uri Lublin <[EMAIL PROTECTED]>
Signed-off-by: Avi Kivity <[EMAIL PROTECTED]>

diff --git a/qemu/migration.c b/qemu/migration.c
index 23cff1e..285c232 100644
--- a/qemu/migration.c
+++ b/qemu/migration.c
@@ -591,6 +591,35 @@ static MigrationState *migration_init_exec(int detach, 
const char *command)
     return migration_init_cmd(detach, "/bin/sh", argv);
 }
 
+
+static int file_release(void *opaque)
+{
+    int fd = (int)(long)opaque;
+    close(fd);
+    return 0;
+}
+
+static MigrationState *migration_init_file(int detach, const char *filename)
+{
+    int fd;
+    MigrationState *s;
+
+    fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600);
+    if (fd == -1) {
+        term_printf("open file %s failed (%s)\n", filename, strerror(errno));
+        return NULL;
+    }
+
+    s = migration_init_fd(detach, fd);
+    if (s) {
+        s->release = file_release;
+        s->opaque = (void*)(long)fd;
+        max_throttle = 1U << 31;
+    }
+
+    return s;
+}
+
 static MigrationState *migration_init_ssh(int detach, const char *host)
 {
     int qemu_argc, daemonize = 0, argc, i;
@@ -1019,6 +1048,9 @@ void do_migrate(int detach, const char *uri)
        if (migration_init_tcp(detach, host) == NULL)
             term_printf("migration failed (migration_init_tcp for %s 
failed)\n", host);
        free(host);
+    } else if (strstart(uri, "file://", &ptr)) {
+        if (migration_init_file(detach, ptr) == NULL)
+            term_printf("migration failed (migration_init_file for %s 
failed)\n", ptr);
     } else {
        term_printf("Unknown migration protocol '%s'\n", uri);
        return;

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
kvm-commits mailing list
kvm-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-commits

Reply via email to