aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYury Kotov <yury-kotov@yandex-team.ru>2019-05-28 12:16:32 +0300
committerJuan Quintela <quintela@redhat.com>2019-06-05 12:43:55 +0200
commit61053d4826a528bdb59872e51f68e540cfad5af0 (patch)
tree52436dc0270db3afbec07c49652788ecf185ef40
parentf38d7fbc015a3745ecdbf1e0158dbc1d1b061f9f (diff)
migration: Fix fd protocol for incoming defer
Currently, incoming migration through fd supports only command-line case: E.g. fork(); fd = open(); exec("qemu ... -incoming fd:%d", fd); It's possible to use add-fd commands to pass fd for migration, but it's invalid case. add-fd works with fdset but not with particular fds. To work with getfd in incoming defer it's enough to use monitor_fd_param instead of strtol. monitor_fd_param supports both cases: * fd:123 * fd:fd_name (added by getfd). And also the use of monitor_fd_param improves error messages. Signed-off-by: Yury Kotov <yury-kotov@yandex-team.ru> Reviewed-by: Peter Xu <peterx@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
-rw-r--r--migration/fd.c8
-rw-r--r--migration/fd.h2
2 files changed, 6 insertions, 4 deletions
diff --git a/migration/fd.c b/migration/fd.c
index a7c13df4ad..0a29ecdebf 100644
--- a/migration/fd.c
+++ b/migration/fd.c
@@ -52,12 +52,14 @@ static gboolean fd_accept_incoming_migration(QIOChannel *ioc,
return G_SOURCE_REMOVE;
}
-void fd_start_incoming_migration(const char *infd, Error **errp)
+void fd_start_incoming_migration(const char *fdname, Error **errp)
{
QIOChannel *ioc;
- int fd;
+ int fd = monitor_fd_param(cur_mon, fdname, errp);
+ if (fd == -1) {
+ return;
+ }
- fd = strtol(infd, NULL, 0);
trace_migration_fd_incoming(fd);
ioc = qio_channel_new_fd(fd, errp);
diff --git a/migration/fd.h b/migration/fd.h
index a14a63ce2e..b901bc014e 100644
--- a/migration/fd.h
+++ b/migration/fd.h
@@ -16,7 +16,7 @@
#ifndef QEMU_MIGRATION_FD_H
#define QEMU_MIGRATION_FD_H
-void fd_start_incoming_migration(const char *path, Error **errp);
+void fd_start_incoming_migration(const char *fdname, Error **errp);
void fd_start_outgoing_migration(MigrationState *s, const char *fdname,
Error **errp);