From patchwork Wed Apr 21 05:57:22 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [RFC,17/20] Modify migrate_fd_put_ready() when ft_mode is on. From: Yoshiaki Tamura X-Patchwork-Id: 50619 Message-Id: <1271829445-5328-18-git-send-email-tamura.yoshiaki@lab.ntt.co.jp> To: kvm@vger.kernel.org, qemu-devel@nongnu.org Cc: aliguori@us.ibm.com, ohmura.kei@lab.ntt.co.jp, mtosatti@redhat.com, Yoshiaki Tamura , yoshikawa.takuya@oss.ntt.co.jp, avi@redhat.com 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 --- 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); }