Message ID | 20190527093350.28567-2-yury-kotov@yandex-team.ru (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Deferred incoming migration through fd | expand |
Yury Kotov <yury-kotov@yandex-team.ru> wrote: > 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). > > Signed-off-by: Yury Kotov <yury-kotov@yandex-team.ru> Reviewed-by: Juan Quintela <quintela@redhat.com> Not only that, it also improves error messages.
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);
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). Signed-off-by: Yury Kotov <yury-kotov@yandex-team.ru> --- migration/fd.c | 8 +++++--- migration/fd.h | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-)