From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56234) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bQ6CV-0004Ea-Gy for qemu-devel@nongnu.org; Thu, 21 Jul 2016 01:07:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bQ6CS-00015n-9m for qemu-devel@nongnu.org; Thu, 21 Jul 2016 01:07:11 -0400 Received: from szxga03-in.huawei.com ([119.145.14.66]:6319) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bQ6CR-00011Y-LW for qemu-devel@nongnu.org; Thu, 21 Jul 2016 01:07:08 -0400 From: zhanghailiang Date: Thu, 21 Jul 2016 13:06:00 +0800 Message-ID: <1469077560-20620-3-git-send-email-zhang.zhanghailiang@huawei.com> In-Reply-To: <1469077560-20620-1-git-send-email-zhang.zhanghailiang@huawei.com> References: <1469077560-20620-1-git-send-email-zhang.zhanghailiang@huawei.com> MIME-Version: 1.0 Content-Type: text/plain Subject: [Qemu-devel] [RFC PATCH 2/2] migration: Allow -incoming to work on file: urls List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: amit.shah@redhat.com, quintela@redhat.com, dgilbert@redhat.com, peter.huangpeng@huawei.com, zhanghailiang , Benoit Canet Usage: -incoming file:/path/to/vm_statefile Besides, use qemu_strtol() instead of strtol(). Signed-off-by: zhanghailiang Signed-off-by: Benoit Canet --- include/migration/migration.h | 2 ++ migration/fd.c | 37 +++++++++++++++++++++++++++++++------ migration/migration.c | 2 ++ migration/trace-events | 1 + 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/include/migration/migration.h b/include/migration/migration.h index cc2e4f6..a7f1051 100644 --- a/include/migration/migration.h +++ b/include/migration/migration.h @@ -223,6 +223,8 @@ void fd_start_outgoing_migration(MigrationState *s, const char *fdname, Error ** void file_start_outgoing_migration(MigrationState *s, const char *filename, Error **errp); +void file_start_incoming_migration(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 fa5df67..472876c 100644 --- a/migration/fd.c +++ b/migration/fd.c @@ -21,7 +21,7 @@ #include "monitor/monitor.h" #include "io/channel-util.h" #include "trace.h" - +#include "qemu/cutils.h" static void fd_start_outgoing_migration_core(MigrationState *s, int fd, Error **errp) @@ -73,13 +73,9 @@ static gboolean fd_accept_incoming_migration(QIOChannel *ioc, return FALSE; /* unregister */ } -void fd_start_incoming_migration(const char *infd, Error **errp) +static void fd_start_incoming_migration_core(int fd, Error **errp) { QIOChannel *ioc; - int fd; - - fd = strtol(infd, NULL, 0); - trace_migration_fd_incoming(fd); ioc = qio_channel_new_fd(fd, errp); if (!ioc) { @@ -93,3 +89,32 @@ void fd_start_incoming_migration(const char *infd, Error **errp) NULL, NULL); } + +void fd_start_incoming_migration(const char *infd, Error **errp) +{ + long fd; + int err; + + err = qemu_strtol(infd, NULL, 0, &fd); + if (err < 0) { + error_setg_errno(errp, -err, "Failed to convert string '%s'" + " to number", infd); + return; + } + + trace_migration_fd_incoming((int)fd); + fd_start_incoming_migration_core((int)fd, errp); +} + +void file_start_incoming_migration(const char *filename, Error **errp) +{ + int fd; + + fd = qemu_open(filename, O_RDONLY); + if (fd < 0) { + error_setg_errno(errp, errno, "Failed to open file:%s", filename); + return; + } + trace_migration_file_incoming(filename); + fd_start_incoming_migration_core(fd, errp); +} diff --git a/migration/migration.c b/migration/migration.c index 097adba..5ed3fea 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -315,6 +315,8 @@ void qemu_start_incoming_migration(const char *uri, Error **errp) unix_start_incoming_migration(p, errp); } else if (strstart(uri, "fd:", &p)) { fd_start_incoming_migration(p, errp); + } else if (strstart(uri, "file:", &p)) { + file_start_incoming_migration(p, errp); } else { error_setg(errp, "unknown migration protocol: %s", uri); } diff --git a/migration/trace-events b/migration/trace-events index 4fca64c..8a76595 100644 --- a/migration/trace-events +++ b/migration/trace-events @@ -195,6 +195,7 @@ migration_exec_incoming(const char *cmd) "cmd=%s" migration_fd_outgoing(int fd) "fd=%d" migration_fd_incoming(int fd) "fd=%d" migration_file_outgoing(const char *filename) "file=%s" +migration_file_incoming(const char *filename) "file=%s" # migration/socket.c migration_socket_incoming_accepted(void) "" -- 1.8.3.1