All of lore.kernel.org
 help / color / mirror / Atom feed
From: zhanghailiang <zhang.zhanghailiang@huawei.com>
To: qemu-devel@nongnu.org
Cc: amit.shah@redhat.com, quintela@redhat.com, dgilbert@redhat.com,
	peter.huangpeng@huawei.com,
	zhanghailiang <zhang.zhanghailiang@huawei.com>,
	Benoit Canet <benoit.canet@gmail.com>
Subject: [Qemu-devel] [RFC PATCH 1/2] migration: Allow the migrate command to work on file:urls
Date: Thu, 21 Jul 2016 13:05:59 +0800	[thread overview]
Message-ID: <1469077560-20620-2-git-send-email-zhang.zhanghailiang@huawei.com> (raw)
In-Reply-To: <1469077560-20620-1-git-send-email-zhang.zhanghailiang@huawei.com>

Usage:
(qemu) migrate file:/path/to/vm_statefile

Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
Signed-off-by: Benoit Canet <benoit.canet@gmail.com>
---
 include/migration/migration.h |  2 ++
 migration/fd.c                | 34 ++++++++++++++++++++++++++++------
 migration/migration.c         |  2 ++
 migration/trace-events        |  1 +
 4 files changed, 33 insertions(+), 6 deletions(-)

diff --git a/include/migration/migration.h b/include/migration/migration.h
index 3c96623..cc2e4f6 100644
--- a/include/migration/migration.h
+++ b/include/migration/migration.h
@@ -221,6 +221,8 @@ void fd_start_incoming_migration(const char *path, Error **errp);
 
 void fd_start_outgoing_migration(MigrationState *s, const char *fdname, Error **errp);
 
+void file_start_outgoing_migration(MigrationState *s, const char *filename, Error **errp);
+
 void rdma_start_outgoing_migration(void *opaque, const char *host_port, Error **errp);
 
 void rdma_start_incoming_migration(const char *host_port, Error **errp);
diff --git a/migration/fd.c b/migration/fd.c
index 84a10fd..fa5df67 100644
--- a/migration/fd.c
+++ b/migration/fd.c
@@ -23,15 +23,11 @@
 #include "trace.h"
 
 
-void fd_start_outgoing_migration(MigrationState *s, const char *fdname, Error **errp)
+static void fd_start_outgoing_migration_core(MigrationState *s, int fd,
+                                             Error **errp)
 {
     QIOChannel *ioc;
-    int fd = monitor_get_fd(cur_mon, fdname, errp);
-    if (fd == -1) {
-        return;
-    }
 
-    trace_migration_fd_outgoing(fd);
     ioc = qio_channel_new_fd(fd, errp);
     if (!ioc) {
         close(fd);
@@ -42,6 +38,32 @@ void fd_start_outgoing_migration(MigrationState *s, const char *fdname, Error **
     object_unref(OBJECT(ioc));
 }
 
+void fd_start_outgoing_migration(MigrationState *s, const char *fdname, Error **errp)
+{
+    int fd = monitor_get_fd(cur_mon, fdname, errp);
+    if (fd == -1) {
+        return;
+    }
+
+    trace_migration_fd_outgoing(fd);
+    fd_start_outgoing_migration_core(s, fd, errp);
+}
+
+void file_start_outgoing_migration(MigrationState *s, const char *filename,
+                                   Error **errp)
+{
+    int fd;
+
+    fd = qemu_open(filename, O_CREAT | O_TRUNC | O_WRONLY, S_IRUSR | S_IWUSR);
+    if (fd < 0) {
+        error_setg_errno(errp, errno, "Failed to open file: %s", filename);
+        return;
+    }
+    
+    trace_migration_file_outgoing(filename);
+    fd_start_outgoing_migration_core(s, fd, errp);
+}
+
 static gboolean fd_accept_incoming_migration(QIOChannel *ioc,
                                              GIOCondition condition,
                                              gpointer opaque)
diff --git a/migration/migration.c b/migration/migration.c
index c4e0193..097adba 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1109,6 +1109,8 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk,
         unix_start_outgoing_migration(s, p, &local_err);
     } else if (strstart(uri, "fd:", &p)) {
         fd_start_outgoing_migration(s, p, &local_err);
+    } else if (strstart(uri, "file:", &p)) {
+        file_start_outgoing_migration(s, p, &local_err);
     } else {
         error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "uri",
                    "a valid migration protocol");
diff --git a/migration/trace-events b/migration/trace-events
index 8568dab..4fca64c 100644
--- a/migration/trace-events
+++ b/migration/trace-events
@@ -194,6 +194,7 @@ migration_exec_incoming(const char *cmd) "cmd=%s"
 # migration/fd.c
 migration_fd_outgoing(int fd) "fd=%d"
 migration_fd_incoming(int fd) "fd=%d"
+migration_file_outgoing(const char *filename) "file=%s"
 
 # migration/socket.c
 migration_socket_incoming_accepted(void) ""
-- 
1.8.3.1

  reply	other threads:[~2016-07-21  5:07 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-21  5:05 [Qemu-devel] [RFC PATCH 0/2] Migration: support working on file:url zhanghailiang
2016-07-21  5:05 ` zhanghailiang [this message]
2016-07-21 12:05   ` [Qemu-devel] [RFC PATCH 1/2] migration: Allow the migrate command to work on file:urls Dr. David Alan Gilbert
2016-07-21 12:13   ` Daniel P. Berrange
2016-07-21  5:06 ` [Qemu-devel] [RFC PATCH 2/2] migration: Allow -incoming to work on file: urls zhanghailiang
2016-07-21 12:07   ` Dr. David Alan Gilbert
2016-07-21 12:19 ` [Qemu-devel] [RFC PATCH 0/2] Migration: support working on file:url Daniel P. Berrange
2016-07-21 17:41   ` Dr. David Alan Gilbert
2016-07-22  8:04     ` Daniel P. Berrange
2016-07-22  6:28   ` Hailiang Zhang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1469077560-20620-2-git-send-email-zhang.zhanghailiang@huawei.com \
    --to=zhang.zhanghailiang@huawei.com \
    --cc=amit.shah@redhat.com \
    --cc=benoit.canet@gmail.com \
    --cc=dgilbert@redhat.com \
    --cc=peter.huangpeng@huawei.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.