qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [RFC PATCH 17/20] Modify migrate_fd_put_ready() when ft_mod


From: Yoshiaki Tamura
Subject: [Qemu-devel] [RFC PATCH 17/20] Modify migrate_fd_put_ready() when ft_mode is on.
Date: Wed, 21 Apr 2010 14:57:22 +0900

When ft_mode is on, migrate_fd_put_ready() would open ft_transaction
file and turn on event_tap.  To end or cancel ft_transaction, ft_mode
and event_tap is turned off.

Signed-off-by: Yoshiaki Tamura <address@hidden>
---
 migration.c |   36 +++++++++++++++++++++++++++++++++---
 1 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/migration.c b/migration.c
index 3cc47fc..c81fdb4 100644
--- a/migration.c
+++ b/migration.c
@@ -494,8 +494,32 @@ void migrate_fd_put_ready(void *opaque)
         } else {
             state = MIG_STATE_COMPLETED;
         }
-        migrate_fd_cleanup(s);
-        s->state = state;
+
+        if (ft_mode && state == MIG_STATE_COMPLETED) {
+            /* close buffered_file and open ft_transaction.
+             * Note: file discriptor won't get closed,
+             * but reused by ft_transaction. */
+            socket_set_block(s->fd);
+            socket_set_nodelay(s->fd);
+            qemu_fclose(s->file);
+            s->file = qemu_fopen_ops_ft_tranx(s,
+                                              migrate_fd_put_buffer,
+                                              migrate_fd_put_vector,
+                                              migrate_fd_get_buffer,
+                                              NULL,
+                                              migrate_fd_close,
+                                              1);
+
+            /* events are tapped from now. */
+            event_tap_on();
+
+            if (old_vm_running) {
+                vm_start();
+            }
+        } else {
+            migrate_fd_cleanup(s);
+            s->state = state;
+        }
     }
 }
 
@@ -515,8 +539,14 @@ void migrate_fd_cancel(MigrationState *mig_state)
     DPRINTF("cancelling migration\n");
 
     s->state = MIG_STATE_CANCELLED;
-    qemu_savevm_state_cancel(s->mon, s->file);
 
+    if (ft_mode == FT_TRANSACTION) {
+        qemu_transaction_cancel(s->file);
+        ft_mode = FT_OFF;
+        event_tap_off();
+    }
+
+    qemu_savevm_state_cancel(s->mon, s->file);
     migrate_fd_cleanup(s);
 }
 
-- 
1.7.0.31.g1df487





reply via email to

[Prev in Thread] Current Thread [Next in Thread]