Message ID | 657f6f30cd7f414dc4b807444667035b3e3c83c5.1316782367.git.quintela@redhat.com |
---|---|
State | New |
Headers | show |
On 09/23/2011 07:57 AM, Juan Quintela wrote: > unix and tcp outgoing migration have error values, but didn't returned > it. Make them return the error. Notice that EINPROGRESS& EWOULDBLOCK > are not considered errors as callwill be retry later. > > Signed-off-by: Juan Quintela<quintela@redhat.com> Reviewed-by: Anthony Liguori <aliguori@us.ibm.com> Regards, Anthony Liguori > --- > migration-tcp.c | 20 +++++++++++--------- > migration-unix.c | 26 ++++++++++---------------- > 2 files changed, 21 insertions(+), 25 deletions(-) > > diff --git a/migration-tcp.c b/migration-tcp.c > index bd3aa3a..619df21 100644 > --- a/migration-tcp.c > +++ b/migration-tcp.c > @@ -90,26 +90,28 @@ int tcp_start_outgoing_migration(MigrationState *s, const char *host_port) > > s->fd = qemu_socket(PF_INET, SOCK_STREAM, 0); > if (s->fd == -1) { > - return -1; > + return -socket_error(); > } > > socket_set_nonblock(s->fd); > > do { > ret = connect(s->fd, (struct sockaddr *)&addr, sizeof(addr)); > - if (ret == -1) > - ret = -(socket_error()); > - > - if (ret == -EINPROGRESS || ret == -EWOULDBLOCK) > + if (ret == -1) { > + ret = -socket_error(); > + } > + if (ret == -EINPROGRESS || ret == -EWOULDBLOCK) { > qemu_set_fd_handler2(s->fd, NULL, NULL, tcp_wait_for_connect, s); > + return 0; > + } > } while (ret == -EINTR); > > - if (ret< 0&& ret != -EINPROGRESS&& ret != -EWOULDBLOCK) { > + if (ret< 0) { > DPRINTF("connect failed\n"); > migrate_fd_error(s); > - } else if (ret>= 0) > - migrate_fd_connect(s); > - > + return ret; > + } > + migrate_fd_connect(s); > return 0; > } > > diff --git a/migration-unix.c b/migration-unix.c > index 7205b25..428fe66 100644 > --- a/migration-unix.c > +++ b/migration-unix.c > @@ -89,35 +89,29 @@ int unix_start_outgoing_migration(MigrationState *s, const char *path) > s->fd = qemu_socket(PF_UNIX, SOCK_STREAM, 0); > if (s->fd< 0) { > DPRINTF("Unable to open socket"); > - goto err_after_socket; > + return -errno; > } > > socket_set_nonblock(s->fd); > > do { > ret = connect(s->fd, (struct sockaddr *)&addr, sizeof(addr)); > - if (ret == -1) > + if (ret == -1) { > ret = -errno; > - > - if (ret == -EINPROGRESS || ret == -EWOULDBLOCK) > + } > + if (ret == -EINPROGRESS || ret == -EWOULDBLOCK) { > qemu_set_fd_handler2(s->fd, NULL, NULL, unix_wait_for_connect, s); > + return 0; > + } > } while (ret == -EINTR); > > - if (ret< 0&& ret != -EINPROGRESS&& ret != -EWOULDBLOCK) { > + if (ret< 0) { > DPRINTF("connect failed\n"); > - goto err_after_open; > + migrate_fd_error(s); > + return ret; > } > - > - if (ret>= 0) > - migrate_fd_connect(s); > - > + migrate_fd_connect(s); > return 0; > - > -err_after_open: > - close(s->fd); > - > -err_after_socket: > - return -1; > } > > static void unix_accept_incoming_migration(void *opaque)
diff --git a/migration-tcp.c b/migration-tcp.c index bd3aa3a..619df21 100644 --- a/migration-tcp.c +++ b/migration-tcp.c @@ -90,26 +90,28 @@ int tcp_start_outgoing_migration(MigrationState *s, const char *host_port) s->fd = qemu_socket(PF_INET, SOCK_STREAM, 0); if (s->fd == -1) { - return -1; + return -socket_error(); } socket_set_nonblock(s->fd); do { ret = connect(s->fd, (struct sockaddr *)&addr, sizeof(addr)); - if (ret == -1) - ret = -(socket_error()); - - if (ret == -EINPROGRESS || ret == -EWOULDBLOCK) + if (ret == -1) { + ret = -socket_error(); + } + if (ret == -EINPROGRESS || ret == -EWOULDBLOCK) { qemu_set_fd_handler2(s->fd, NULL, NULL, tcp_wait_for_connect, s); + return 0; + } } while (ret == -EINTR); - if (ret < 0 && ret != -EINPROGRESS && ret != -EWOULDBLOCK) { + if (ret < 0) { DPRINTF("connect failed\n"); migrate_fd_error(s); - } else if (ret >= 0) - migrate_fd_connect(s); - + return ret; + } + migrate_fd_connect(s); return 0; } diff --git a/migration-unix.c b/migration-unix.c index 7205b25..428fe66 100644 --- a/migration-unix.c +++ b/migration-unix.c @@ -89,35 +89,29 @@ int unix_start_outgoing_migration(MigrationState *s, const char *path) s->fd = qemu_socket(PF_UNIX, SOCK_STREAM, 0); if (s->fd < 0) { DPRINTF("Unable to open socket"); - goto err_after_socket; + return -errno; } socket_set_nonblock(s->fd); do { ret = connect(s->fd, (struct sockaddr *)&addr, sizeof(addr)); - if (ret == -1) + if (ret == -1) { ret = -errno; - - if (ret == -EINPROGRESS || ret == -EWOULDBLOCK) + } + if (ret == -EINPROGRESS || ret == -EWOULDBLOCK) { qemu_set_fd_handler2(s->fd, NULL, NULL, unix_wait_for_connect, s); + return 0; + } } while (ret == -EINTR); - if (ret < 0 && ret != -EINPROGRESS && ret != -EWOULDBLOCK) { + if (ret < 0) { DPRINTF("connect failed\n"); - goto err_after_open; + migrate_fd_error(s); + return ret; } - - if (ret >= 0) - migrate_fd_connect(s); - + migrate_fd_connect(s); return 0; - -err_after_open: - close(s->fd); - -err_after_socket: - return -1; } static void unix_accept_incoming_migration(void *opaque)
unix and tcp outgoing migration have error values, but didn't returned it. Make them return the error. Notice that EINPROGRESS & EWOULDBLOCK are not considered errors as callwill be retry later. Signed-off-by: Juan Quintela <quintela@redhat.com> --- migration-tcp.c | 20 +++++++++++--------- migration-unix.c | 26 ++++++++++---------------- 2 files changed, 21 insertions(+), 25 deletions(-)