From 7be4363a2828021fd486f7f45e792aecaf909454 Mon Sep 17 00:00:00 2001 From: Juan Quintela Date: Tue, 11 May 2010 15:18:38 +0200 Subject: migration: Make *start_outgoing_migration return FdMigrationState Signed-off-by: Juan Quintela Reviewed-by: Anthony Liguori --- migration-unix.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'migration-unix.c') diff --git a/migration-unix.c b/migration-unix.c index 6dc985d423..0eeedde9bf 100644 --- a/migration-unix.c +++ b/migration-unix.c @@ -74,7 +74,7 @@ static void unix_wait_for_connect(void *opaque) } } -MigrationState *unix_start_outgoing_migration(Monitor *mon, +FdMigrationState *unix_start_outgoing_migration(Monitor *mon, const char *path, int64_t bandwidth_limit, int detach, @@ -132,7 +132,7 @@ MigrationState *unix_start_outgoing_migration(Monitor *mon, if (ret >= 0) migrate_fd_connect(s); - return &s->mig_state; + return s; err_after_open: close(s->fd); -- cgit 1.4.1 From 3f77fc557e3e1cb8aab72ca0ca91aac67d478118 Mon Sep 17 00:00:00 2001 From: Juan Quintela Date: Tue, 11 May 2010 15:51:36 +0200 Subject: migration: Fold MigrationState into FdMigrationState Signed-off-by: Juan Quintela Reviewed-by: Anthony Liguori --- migration-exec.c | 10 +++++----- migration-fd.c | 10 +++++----- migration-tcp.c | 10 +++++----- migration-unix.c | 10 +++++----- migration.c | 14 ++++++-------- migration.h | 23 +++++------------------ 6 files changed, 31 insertions(+), 46 deletions(-) (limited to 'migration-unix.c') diff --git a/migration-exec.c b/migration-exec.c index 759aa7999c..39fd416e86 100644 --- a/migration-exec.c +++ b/migration-exec.c @@ -92,12 +92,12 @@ FdMigrationState *exec_start_outgoing_migration(Monitor *mon, s->close = exec_close; s->get_error = file_errno; s->write = file_write; - s->mig_state.cancel = migrate_fd_cancel; - s->mig_state.get_status = migrate_fd_get_status; - s->mig_state.release = migrate_fd_release; + s->cancel = migrate_fd_cancel; + s->get_status = migrate_fd_get_status; + s->release = migrate_fd_release; - s->mig_state.blk = blk; - s->mig_state.shared = inc; + s->blk = blk; + s->shared = inc; s->state = MIG_STATE_ACTIVE; s->mon = NULL; diff --git a/migration-fd.c b/migration-fd.c index 8036a27d28..c3c7b0eec1 100644 --- a/migration-fd.c +++ b/migration-fd.c @@ -75,12 +75,12 @@ FdMigrationState *fd_start_outgoing_migration(Monitor *mon, s->get_error = fd_errno; s->write = fd_write; s->close = fd_close; - s->mig_state.cancel = migrate_fd_cancel; - s->mig_state.get_status = migrate_fd_get_status; - s->mig_state.release = migrate_fd_release; + s->cancel = migrate_fd_cancel; + s->get_status = migrate_fd_get_status; + s->release = migrate_fd_release; - s->mig_state.blk = blk; - s->mig_state.shared = inc; + s->blk = blk; + s->shared = inc; s->state = MIG_STATE_ACTIVE; s->mon = NULL; diff --git a/migration-tcp.c b/migration-tcp.c index 05a121f1d1..5ce93d9864 100644 --- a/migration-tcp.c +++ b/migration-tcp.c @@ -94,12 +94,12 @@ FdMigrationState *tcp_start_outgoing_migration(Monitor *mon, s->get_error = socket_errno; s->write = socket_write; s->close = tcp_close; - s->mig_state.cancel = migrate_fd_cancel; - s->mig_state.get_status = migrate_fd_get_status; - s->mig_state.release = migrate_fd_release; + s->cancel = migrate_fd_cancel; + s->get_status = migrate_fd_get_status; + s->release = migrate_fd_release; - s->mig_state.blk = blk; - s->mig_state.shared = inc; + s->blk = blk; + s->shared = inc; s->state = MIG_STATE_ACTIVE; s->mon = NULL; diff --git a/migration-unix.c b/migration-unix.c index 0eeedde9bf..00a6ed5762 100644 --- a/migration-unix.c +++ b/migration-unix.c @@ -93,12 +93,12 @@ FdMigrationState *unix_start_outgoing_migration(Monitor *mon, s->get_error = unix_errno; s->write = unix_write; s->close = unix_close; - s->mig_state.cancel = migrate_fd_cancel; - s->mig_state.get_status = migrate_fd_get_status; - s->mig_state.release = migrate_fd_release; + s->cancel = migrate_fd_cancel; + s->get_status = migrate_fd_get_status; + s->release = migrate_fd_release; - s->mig_state.blk = blk; - s->mig_state.shared = inc; + s->blk = blk; + s->shared = inc; s->state = MIG_STATE_ACTIVE; s->mon = NULL; diff --git a/migration.c b/migration.c index e3362b76d8..caa9e03dd1 100644 --- a/migration.c +++ b/migration.c @@ -87,8 +87,7 @@ int do_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data) const char *uri = qdict_get_str(qdict, "uri"); if (current_migration && - current_migration->mig_state.get_status(current_migration) == - MIG_STATE_ACTIVE) { + current_migration->get_status(current_migration) == MIG_STATE_ACTIVE) { monitor_printf(mon, "migration already in progress\n"); return -1; } @@ -122,7 +121,7 @@ int do_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data) } if (current_migration) { - current_migration->mig_state.release(current_migration); + current_migration->release(current_migration); } current_migration = s; @@ -134,8 +133,8 @@ int do_migrate_cancel(Monitor *mon, const QDict *qdict, QObject **ret_data) { FdMigrationState *s = current_migration; - if (s && s->mig_state.get_status(s) == MIG_STATE_ACTIVE) { - s->mig_state.cancel(s); + if (s && s->get_status(s) == MIG_STATE_ACTIVE) { + s->cancel(s); } return 0; } @@ -231,7 +230,7 @@ void do_info_migrate(Monitor *mon, QObject **ret_data) QDict *qdict; if (current_migration) { - MigrationState *s = ¤t_migration->mig_state; + FdMigrationState *s = current_migration; switch (s->get_status(current_migration)) { case MIG_STATE_ACTIVE: @@ -355,8 +354,7 @@ void migrate_fd_connect(FdMigrationState *s) migrate_fd_close); DPRINTF("beginning savevm\n"); - ret = qemu_savevm_state_begin(s->mon, s->file, s->mig_state.blk, - s->mig_state.shared); + ret = qemu_savevm_state_begin(s->mon, s->file, s->blk, s->shared); if (ret < 0) { DPRINTF("failed, %d\n", ret); migrate_fd_error(s); diff --git a/migration.h b/migration.h index b10bb6e79d..f0caf7b26b 100644 --- a/migration.h +++ b/migration.h @@ -23,23 +23,10 @@ #define MIG_STATE_CANCELLED 1 #define MIG_STATE_ACTIVE 2 -typedef struct MigrationState MigrationState; - typedef struct FdMigrationState FdMigrationState; -struct MigrationState -{ - /* FIXME: add more accessors to print migration info */ - void (*cancel)(FdMigrationState *s); - int (*get_status)(FdMigrationState *s); - void (*release)(FdMigrationState *s); - int blk; - int shared; -}; - struct FdMigrationState { - MigrationState mig_state; int64_t bandwidth_limit; QEMUFile *file; int fd; @@ -48,7 +35,12 @@ struct FdMigrationState int (*get_error)(struct FdMigrationState*); int (*close)(struct FdMigrationState*); int (*write)(struct FdMigrationState*, const void *, size_t); + void (*cancel)(FdMigrationState *s); + int (*get_status)(FdMigrationState *s); + void (*release)(FdMigrationState *s); void *opaque; + int blk; + int shared; }; void process_incoming_migration(QEMUFile *f); @@ -130,11 +122,6 @@ void migrate_fd_wait_for_unfreeze(void *opaque); int migrate_fd_close(void *opaque); -static inline FdMigrationState *migrate_to_fms(MigrationState *mig_state) -{ - return container_of(mig_state, FdMigrationState, mig_state); -} - void add_migration_state_change_notifier(Notifier *notify); void remove_migration_state_change_notifier(Notifier *notify); int get_migration_state(void); -- cgit 1.4.1 From 22f00a4445fac68b10d1cb669836eeb8d32af56d Mon Sep 17 00:00:00 2001 From: Juan Quintela Date: Tue, 11 May 2010 15:56:35 +0200 Subject: migration: Rename FdMigrationState MigrationState Signed-off-by: Juan Quintela Reviewed-by: Anthony Liguori --- migration-exec.c | 10 +++++----- migration-fd.c | 10 +++++----- migration-tcp.c | 12 ++++++------ migration-unix.c | 12 ++++++------ migration.c | 34 +++++++++++++++++----------------- migration.h | 38 +++++++++++++++++++------------------- 6 files changed, 58 insertions(+), 58 deletions(-) (limited to 'migration-unix.c') diff --git a/migration-exec.c b/migration-exec.c index 39fd416e86..0ed5976699 100644 --- a/migration-exec.c +++ b/migration-exec.c @@ -32,17 +32,17 @@ do { } while (0) #endif -static int file_errno(FdMigrationState *s) +static int file_errno(MigrationState *s) { return errno; } -static int file_write(FdMigrationState *s, const void * buf, size_t size) +static int file_write(MigrationState *s, const void * buf, size_t size) { return write(s->fd, buf, size); } -static int exec_close(FdMigrationState *s) +static int exec_close(MigrationState *s) { int ret = 0; DPRINTF("exec_close\n"); @@ -61,14 +61,14 @@ static int exec_close(FdMigrationState *s) return ret; } -FdMigrationState *exec_start_outgoing_migration(Monitor *mon, +MigrationState *exec_start_outgoing_migration(Monitor *mon, const char *command, int64_t bandwidth_limit, int detach, int blk, int inc) { - FdMigrationState *s; + MigrationState *s; FILE *f; s = g_malloc0(sizeof(*s)); diff --git a/migration-fd.c b/migration-fd.c index c3c7b0eec1..e78fd4e9e4 100644 --- a/migration-fd.c +++ b/migration-fd.c @@ -30,17 +30,17 @@ do { } while (0) #endif -static int fd_errno(FdMigrationState *s) +static int fd_errno(MigrationState *s) { return errno; } -static int fd_write(FdMigrationState *s, const void * buf, size_t size) +static int fd_write(MigrationState *s, const void * buf, size_t size) { return write(s->fd, buf, size); } -static int fd_close(FdMigrationState *s) +static int fd_close(MigrationState *s) { DPRINTF("fd_close\n"); if (s->fd != -1) { @@ -50,14 +50,14 @@ static int fd_close(FdMigrationState *s) return 0; } -FdMigrationState *fd_start_outgoing_migration(Monitor *mon, +MigrationState *fd_start_outgoing_migration(Monitor *mon, const char *fdname, int64_t bandwidth_limit, int detach, int blk, int inc) { - FdMigrationState *s; + MigrationState *s; s = g_malloc0(sizeof(*s)); diff --git a/migration-tcp.c b/migration-tcp.c index 5ce93d9864..d6feb237ed 100644 --- a/migration-tcp.c +++ b/migration-tcp.c @@ -28,17 +28,17 @@ do { } while (0) #endif -static int socket_errno(FdMigrationState *s) +static int socket_errno(MigrationState *s) { return socket_error(); } -static int socket_write(FdMigrationState *s, const void * buf, size_t size) +static int socket_write(MigrationState *s, const void * buf, size_t size) { return send(s->fd, buf, size, 0); } -static int tcp_close(FdMigrationState *s) +static int tcp_close(MigrationState *s) { DPRINTF("tcp_close\n"); if (s->fd != -1) { @@ -51,7 +51,7 @@ static int tcp_close(FdMigrationState *s) static void tcp_wait_for_connect(void *opaque) { - FdMigrationState *s = opaque; + MigrationState *s = opaque; int val, ret; socklen_t valsize = sizeof(val); @@ -75,7 +75,7 @@ static void tcp_wait_for_connect(void *opaque) } } -FdMigrationState *tcp_start_outgoing_migration(Monitor *mon, +MigrationState *tcp_start_outgoing_migration(Monitor *mon, const char *host_port, int64_t bandwidth_limit, int detach, @@ -83,7 +83,7 @@ FdMigrationState *tcp_start_outgoing_migration(Monitor *mon, int inc) { struct sockaddr_in addr; - FdMigrationState *s; + MigrationState *s; int ret; if (parse_host_port(&addr, host_port) < 0) diff --git a/migration-unix.c b/migration-unix.c index 00a6ed5762..3b9017be49 100644 --- a/migration-unix.c +++ b/migration-unix.c @@ -28,17 +28,17 @@ do { } while (0) #endif -static int unix_errno(FdMigrationState *s) +static int unix_errno(MigrationState *s) { return errno; } -static int unix_write(FdMigrationState *s, const void * buf, size_t size) +static int unix_write(MigrationState *s, const void * buf, size_t size) { return write(s->fd, buf, size); } -static int unix_close(FdMigrationState *s) +static int unix_close(MigrationState *s) { DPRINTF("unix_close\n"); if (s->fd != -1) { @@ -50,7 +50,7 @@ static int unix_close(FdMigrationState *s) static void unix_wait_for_connect(void *opaque) { - FdMigrationState *s = opaque; + MigrationState *s = opaque; int val, ret; socklen_t valsize = sizeof(val); @@ -74,14 +74,14 @@ static void unix_wait_for_connect(void *opaque) } } -FdMigrationState *unix_start_outgoing_migration(Monitor *mon, +MigrationState *unix_start_outgoing_migration(Monitor *mon, const char *path, int64_t bandwidth_limit, int detach, int blk, int inc) { - FdMigrationState *s; + MigrationState *s; struct sockaddr_un addr; int ret; diff --git a/migration.c b/migration.c index caa9e03dd1..daf3ef6328 100644 --- a/migration.c +++ b/migration.c @@ -34,7 +34,7 @@ /* Migration speed throttling */ static int64_t max_throttle = (32 << 20); -static FdMigrationState *current_migration; +static MigrationState *current_migration; static NotifierList migration_state_notifiers = NOTIFIER_LIST_INITIALIZER(migration_state_notifiers); @@ -79,7 +79,7 @@ void process_incoming_migration(QEMUFile *f) int do_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data) { - FdMigrationState *s = NULL; + MigrationState *s = NULL; const char *p; int detach = qdict_get_try_bool(qdict, "detach", 0); int blk = qdict_get_try_bool(qdict, "blk", 0); @@ -131,7 +131,7 @@ int do_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data) int do_migrate_cancel(Monitor *mon, const QDict *qdict, QObject **ret_data) { - FdMigrationState *s = current_migration; + MigrationState *s = current_migration; if (s && s->get_status(s) == MIG_STATE_ACTIVE) { s->cancel(s); @@ -142,7 +142,7 @@ int do_migrate_cancel(Monitor *mon, const QDict *qdict, QObject **ret_data) int do_migrate_set_speed(Monitor *mon, const QDict *qdict, QObject **ret_data) { int64_t d; - FdMigrationState *s; + MigrationState *s; d = qdict_get_int(qdict, "value"); if (d < 0) { @@ -230,7 +230,7 @@ void do_info_migrate(Monitor *mon, QObject **ret_data) QDict *qdict; if (current_migration) { - FdMigrationState *s = current_migration; + MigrationState *s = current_migration; switch (s->get_status(current_migration)) { case MIG_STATE_ACTIVE: @@ -263,7 +263,7 @@ void do_info_migrate(Monitor *mon, QObject **ret_data) /* shared migration helpers */ -void migrate_fd_monitor_suspend(FdMigrationState *s, Monitor *mon) +void migrate_fd_monitor_suspend(MigrationState *s, Monitor *mon) { s->mon = mon; if (monitor_suspend(mon) == 0) { @@ -274,7 +274,7 @@ void migrate_fd_monitor_suspend(FdMigrationState *s, Monitor *mon) } } -void migrate_fd_error(FdMigrationState *s) +void migrate_fd_error(MigrationState *s) { DPRINTF("setting error state\n"); s->state = MIG_STATE_ERROR; @@ -282,7 +282,7 @@ void migrate_fd_error(FdMigrationState *s) migrate_fd_cleanup(s); } -int migrate_fd_cleanup(FdMigrationState *s) +int migrate_fd_cleanup(MigrationState *s) { int ret = 0; @@ -310,7 +310,7 @@ int migrate_fd_cleanup(FdMigrationState *s) void migrate_fd_put_notify(void *opaque) { - FdMigrationState *s = opaque; + MigrationState *s = opaque; qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL); qemu_file_put_notify(s->file); @@ -321,7 +321,7 @@ void migrate_fd_put_notify(void *opaque) ssize_t migrate_fd_put_buffer(void *opaque, const void *data, size_t size) { - FdMigrationState *s = opaque; + MigrationState *s = opaque; ssize_t ret; if (s->state != MIG_STATE_ACTIVE) { @@ -342,7 +342,7 @@ ssize_t migrate_fd_put_buffer(void *opaque, const void *data, size_t size) return ret; } -void migrate_fd_connect(FdMigrationState *s) +void migrate_fd_connect(MigrationState *s) { int ret; @@ -366,7 +366,7 @@ void migrate_fd_connect(FdMigrationState *s) void migrate_fd_put_ready(void *opaque) { - FdMigrationState *s = opaque; + MigrationState *s = opaque; int ret; if (s->state != MIG_STATE_ACTIVE) { @@ -404,12 +404,12 @@ void migrate_fd_put_ready(void *opaque) } } -int migrate_fd_get_status(FdMigrationState *s) +int migrate_fd_get_status(MigrationState *s) { return s->state; } -void migrate_fd_cancel(FdMigrationState *s) +void migrate_fd_cancel(MigrationState *s) { if (s->state != MIG_STATE_ACTIVE) return; @@ -423,7 +423,7 @@ void migrate_fd_cancel(FdMigrationState *s) migrate_fd_cleanup(s); } -void migrate_fd_release(FdMigrationState *s) +void migrate_fd_release(MigrationState *s) { DPRINTF("releasing state\n"); @@ -438,7 +438,7 @@ void migrate_fd_release(FdMigrationState *s) void migrate_fd_wait_for_unfreeze(void *opaque) { - FdMigrationState *s = opaque; + MigrationState *s = opaque; int ret; DPRINTF("wait for unfreeze\n"); @@ -461,7 +461,7 @@ void migrate_fd_wait_for_unfreeze(void *opaque) int migrate_fd_close(void *opaque) { - FdMigrationState *s = opaque; + MigrationState *s = opaque; if (s->mon) { monitor_resume(s->mon); diff --git a/migration.h b/migration.h index f0caf7b26b..e24efedefe 100644 --- a/migration.h +++ b/migration.h @@ -23,21 +23,21 @@ #define MIG_STATE_CANCELLED 1 #define MIG_STATE_ACTIVE 2 -typedef struct FdMigrationState FdMigrationState; +typedef struct MigrationState MigrationState; -struct FdMigrationState +struct MigrationState { int64_t bandwidth_limit; QEMUFile *file; int fd; Monitor *mon; int state; - int (*get_error)(struct FdMigrationState*); - int (*close)(struct FdMigrationState*); - int (*write)(struct FdMigrationState*, const void *, size_t); - void (*cancel)(FdMigrationState *s); - int (*get_status)(FdMigrationState *s); - void (*release)(FdMigrationState *s); + int (*get_error)(MigrationState *s); + int (*close)(MigrationState *s); + int (*write)(MigrationState *s, const void *buff, size_t size); + void (*cancel)(MigrationState *s); + int (*get_status)(MigrationState *s); + void (*release)(MigrationState *s); void *opaque; int blk; int shared; @@ -64,7 +64,7 @@ void do_info_migrate(Monitor *mon, QObject **ret_data); int exec_start_incoming_migration(const char *host_port); -FdMigrationState *exec_start_outgoing_migration(Monitor *mon, +MigrationState *exec_start_outgoing_migration(Monitor *mon, const char *host_port, int64_t bandwidth_limit, int detach, @@ -73,7 +73,7 @@ FdMigrationState *exec_start_outgoing_migration(Monitor *mon, int tcp_start_incoming_migration(const char *host_port); -FdMigrationState *tcp_start_outgoing_migration(Monitor *mon, +MigrationState *tcp_start_outgoing_migration(Monitor *mon, const char *host_port, int64_t bandwidth_limit, int detach, @@ -82,7 +82,7 @@ FdMigrationState *tcp_start_outgoing_migration(Monitor *mon, int unix_start_incoming_migration(const char *path); -FdMigrationState *unix_start_outgoing_migration(Monitor *mon, +MigrationState *unix_start_outgoing_migration(Monitor *mon, const char *path, int64_t bandwidth_limit, int detach, @@ -91,32 +91,32 @@ FdMigrationState *unix_start_outgoing_migration(Monitor *mon, int fd_start_incoming_migration(const char *path); -FdMigrationState *fd_start_outgoing_migration(Monitor *mon, +MigrationState *fd_start_outgoing_migration(Monitor *mon, const char *fdname, int64_t bandwidth_limit, int detach, int blk, int inc); -void migrate_fd_monitor_suspend(FdMigrationState *s, Monitor *mon); +void migrate_fd_monitor_suspend(MigrationState *s, Monitor *mon); -void migrate_fd_error(FdMigrationState *s); +void migrate_fd_error(MigrationState *s); -int migrate_fd_cleanup(FdMigrationState *s); +int migrate_fd_cleanup(MigrationState *s); void migrate_fd_put_notify(void *opaque); ssize_t migrate_fd_put_buffer(void *opaque, const void *data, size_t size); -void migrate_fd_connect(FdMigrationState *s); +void migrate_fd_connect(MigrationState *s); void migrate_fd_put_ready(void *opaque); -int migrate_fd_get_status(FdMigrationState *mig_state); +int migrate_fd_get_status(MigrationState *mig_state); -void migrate_fd_cancel(FdMigrationState *mig_state); +void migrate_fd_cancel(MigrationState *mig_state); -void migrate_fd_release(FdMigrationState *mig_state); +void migrate_fd_release(MigrationState *mig_state); void migrate_fd_wait_for_unfreeze(void *opaque); -- cgit 1.4.1 From 0edda1c42aa49dd3207f3c76bf25fd53ac16345d Mon Sep 17 00:00:00 2001 From: Juan Quintela Date: Tue, 11 May 2010 16:28:39 +0200 Subject: migration: Refactor MigrationState creation Signed-off-by: Juan Quintela Reviewed-by: Anthony Liguori --- migration-exec.c | 16 +--------------- migration-fd.c | 16 +--------------- migration-tcp.c | 15 +-------------- migration-unix.c | 15 +-------------- migration.c | 29 +++++++++++++++++++++++++---- migration.h | 11 +++-------- 6 files changed, 32 insertions(+), 70 deletions(-) (limited to 'migration-unix.c') diff --git a/migration-exec.c b/migration-exec.c index 0ed5976699..d0119c67d8 100644 --- a/migration-exec.c +++ b/migration-exec.c @@ -71,7 +71,7 @@ MigrationState *exec_start_outgoing_migration(Monitor *mon, MigrationState *s; FILE *f; - s = g_malloc0(sizeof(*s)); + s = migrate_new(mon, bandwidth_limit, detach, blk, inc); f = popen(command, "w"); if (f == NULL) { @@ -92,20 +92,6 @@ MigrationState *exec_start_outgoing_migration(Monitor *mon, s->close = exec_close; s->get_error = file_errno; s->write = file_write; - s->cancel = migrate_fd_cancel; - s->get_status = migrate_fd_get_status; - s->release = migrate_fd_release; - - s->blk = blk; - s->shared = inc; - - s->state = MIG_STATE_ACTIVE; - s->mon = NULL; - s->bandwidth_limit = bandwidth_limit; - - if (!detach) { - migrate_fd_monitor_suspend(s, mon); - } migrate_fd_connect(s); return s; diff --git a/migration-fd.c b/migration-fd.c index e78fd4e9e4..9d3ca420e0 100644 --- a/migration-fd.c +++ b/migration-fd.c @@ -59,7 +59,7 @@ MigrationState *fd_start_outgoing_migration(Monitor *mon, { MigrationState *s; - s = g_malloc0(sizeof(*s)); + s = migrate_new(mon, bandwidth_limit, detach, blk, inc); s->fd = monitor_get_fd(mon, fdname); if (s->fd == -1) { @@ -75,20 +75,6 @@ MigrationState *fd_start_outgoing_migration(Monitor *mon, s->get_error = fd_errno; s->write = fd_write; s->close = fd_close; - s->cancel = migrate_fd_cancel; - s->get_status = migrate_fd_get_status; - s->release = migrate_fd_release; - - s->blk = blk; - s->shared = inc; - - s->state = MIG_STATE_ACTIVE; - s->mon = NULL; - s->bandwidth_limit = bandwidth_limit; - - if (!detach) { - migrate_fd_monitor_suspend(s, mon); - } migrate_fd_connect(s); return s; diff --git a/migration-tcp.c b/migration-tcp.c index d6feb237ed..999d4c9aac 100644 --- a/migration-tcp.c +++ b/migration-tcp.c @@ -89,21 +89,12 @@ MigrationState *tcp_start_outgoing_migration(Monitor *mon, if (parse_host_port(&addr, host_port) < 0) return NULL; - s = g_malloc0(sizeof(*s)); + s = migrate_new(mon, bandwidth_limit, detach, blk, inc); s->get_error = socket_errno; s->write = socket_write; s->close = tcp_close; - s->cancel = migrate_fd_cancel; - s->get_status = migrate_fd_get_status; - s->release = migrate_fd_release; - s->blk = blk; - s->shared = inc; - - s->state = MIG_STATE_ACTIVE; - s->mon = NULL; - s->bandwidth_limit = bandwidth_limit; s->fd = qemu_socket(PF_INET, SOCK_STREAM, 0); if (s->fd == -1) { g_free(s); @@ -112,10 +103,6 @@ MigrationState *tcp_start_outgoing_migration(Monitor *mon, socket_set_nonblock(s->fd); - if (!detach) { - migrate_fd_monitor_suspend(s, mon); - } - do { ret = connect(s->fd, (struct sockaddr *)&addr, sizeof(addr)); if (ret == -1) diff --git a/migration-unix.c b/migration-unix.c index 3b9017be49..bee71d966c 100644 --- a/migration-unix.c +++ b/migration-unix.c @@ -88,21 +88,12 @@ MigrationState *unix_start_outgoing_migration(Monitor *mon, addr.sun_family = AF_UNIX; snprintf(addr.sun_path, sizeof(addr.sun_path), "%s", path); - s = g_malloc0(sizeof(*s)); + s = migrate_new(mon, bandwidth_limit, detach, blk, inc); s->get_error = unix_errno; s->write = unix_write; s->close = unix_close; - s->cancel = migrate_fd_cancel; - s->get_status = migrate_fd_get_status; - s->release = migrate_fd_release; - s->blk = blk; - s->shared = inc; - - s->state = MIG_STATE_ACTIVE; - s->mon = NULL; - s->bandwidth_limit = bandwidth_limit; s->fd = qemu_socket(PF_UNIX, SOCK_STREAM, 0); if (s->fd < 0) { DPRINTF("Unable to open socket"); @@ -125,10 +116,6 @@ MigrationState *unix_start_outgoing_migration(Monitor *mon, goto err_after_open; } - if (!detach) { - migrate_fd_monitor_suspend(s, mon); - } - if (ret >= 0) migrate_fd_connect(s); diff --git a/migration.c b/migration.c index daf3ef6328..78d0f6116e 100644 --- a/migration.c +++ b/migration.c @@ -263,7 +263,7 @@ void do_info_migrate(Monitor *mon, QObject **ret_data) /* shared migration helpers */ -void migrate_fd_monitor_suspend(MigrationState *s, Monitor *mon) +static void migrate_fd_monitor_suspend(MigrationState *s, Monitor *mon) { s->mon = mon; if (monitor_suspend(mon) == 0) { @@ -404,12 +404,12 @@ void migrate_fd_put_ready(void *opaque) } } -int migrate_fd_get_status(MigrationState *s) +static int migrate_fd_get_status(MigrationState *s) { return s->state; } -void migrate_fd_cancel(MigrationState *s) +static void migrate_fd_cancel(MigrationState *s) { if (s->state != MIG_STATE_ACTIVE) return; @@ -423,7 +423,7 @@ void migrate_fd_cancel(MigrationState *s) migrate_fd_cleanup(s); } -void migrate_fd_release(MigrationState *s) +static void migrate_fd_release(MigrationState *s) { DPRINTF("releasing state\n"); @@ -488,3 +488,24 @@ int get_migration_state(void) return MIG_STATE_ERROR; } } + +MigrationState *migrate_new(Monitor *mon, int64_t bandwidth_limit, + int detach, int blk, int inc) +{ + MigrationState *s = g_malloc0(sizeof(*s)); + + s->cancel = migrate_fd_cancel; + s->get_status = migrate_fd_get_status; + s->release = migrate_fd_release; + s->blk = blk; + s->shared = inc; + s->mon = NULL; + s->bandwidth_limit = bandwidth_limit; + s->state = MIG_STATE_ACTIVE; + + if (!detach) { + migrate_fd_monitor_suspend(s, mon); + } + + return s; +} diff --git a/migration.h b/migration.h index e24efedefe..5f933e865c 100644 --- a/migration.h +++ b/migration.h @@ -98,8 +98,6 @@ MigrationState *fd_start_outgoing_migration(Monitor *mon, int blk, int inc); -void migrate_fd_monitor_suspend(MigrationState *s, Monitor *mon); - void migrate_fd_error(MigrationState *s); int migrate_fd_cleanup(MigrationState *s); @@ -112,16 +110,13 @@ void migrate_fd_connect(MigrationState *s); void migrate_fd_put_ready(void *opaque); -int migrate_fd_get_status(MigrationState *mig_state); - -void migrate_fd_cancel(MigrationState *mig_state); - -void migrate_fd_release(MigrationState *mig_state); - void migrate_fd_wait_for_unfreeze(void *opaque); int migrate_fd_close(void *opaque); +MigrationState *migrate_new(Monitor *mon, int64_t bandwidth_limit, + int detach, int blk, int inc); + void add_migration_state_change_notifier(Notifier *notify); void remove_migration_state_change_notifier(Notifier *notify); int get_migration_state(void); -- cgit 1.4.1 From 07af4452919fddc6dca6462828b457aad62f6387 Mon Sep 17 00:00:00 2001 From: Juan Quintela Date: Tue, 11 May 2010 22:27:45 +0200 Subject: migration: move migrate_new to do_migrate Once there, remove all parameters that don't need to be passed to *start_outgoing_migration() functions Signed-off-by: Juan Quintela Reviewed-by: Anthony Liguori --- migration-exec.c | 19 +++++-------------- migration-fd.c | 22 ++++++---------------- migration-tcp.c | 22 +++++++--------------- migration-unix.c | 20 +++++--------------- migration.c | 32 +++++++++++++++++++------------- migration.h | 31 ++++--------------------------- 6 files changed, 46 insertions(+), 100 deletions(-) (limited to 'migration-unix.c') diff --git a/migration-exec.c b/migration-exec.c index d0119c67d8..b7b1055e88 100644 --- a/migration-exec.c +++ b/migration-exec.c @@ -61,22 +61,14 @@ static int exec_close(MigrationState *s) return ret; } -MigrationState *exec_start_outgoing_migration(Monitor *mon, - const char *command, - int64_t bandwidth_limit, - int detach, - int blk, - int inc) +int exec_start_outgoing_migration(MigrationState *s, const char *command) { - MigrationState *s; FILE *f; - s = migrate_new(mon, bandwidth_limit, detach, blk, inc); - f = popen(command, "w"); if (f == NULL) { DPRINTF("Unable to popen exec target\n"); - goto err_after_alloc; + goto err_after_popen; } s->fd = fileno(f); @@ -94,13 +86,12 @@ MigrationState *exec_start_outgoing_migration(Monitor *mon, s->write = file_write; migrate_fd_connect(s); - return s; + return 0; err_after_open: pclose(f); -err_after_alloc: - g_free(s); - return NULL; +err_after_popen: + return -1; } static void exec_accept_incoming_migration(void *opaque) diff --git a/migration-fd.c b/migration-fd.c index 9d3ca420e0..d0aec89e8d 100644 --- a/migration-fd.c +++ b/migration-fd.c @@ -50,21 +50,12 @@ static int fd_close(MigrationState *s) return 0; } -MigrationState *fd_start_outgoing_migration(Monitor *mon, - const char *fdname, - int64_t bandwidth_limit, - int detach, - int blk, - int inc) +int fd_start_outgoing_migration(MigrationState *s, const char *fdname) { - MigrationState *s; - - s = migrate_new(mon, bandwidth_limit, detach, blk, inc); - - s->fd = monitor_get_fd(mon, fdname); + s->fd = monitor_get_fd(s->mon, fdname); if (s->fd == -1) { DPRINTF("fd_migration: invalid file descriptor identifier\n"); - goto err_after_alloc; + goto err_after_get_fd; } if (fcntl(s->fd, F_SETFL, O_NONBLOCK) == -1) { @@ -77,13 +68,12 @@ MigrationState *fd_start_outgoing_migration(Monitor *mon, s->close = fd_close; migrate_fd_connect(s); - return s; + return 0; err_after_open: close(s->fd); -err_after_alloc: - g_free(s); - return NULL; +err_after_get_fd: + return -1; } static void fd_accept_incoming_migration(void *opaque) diff --git a/migration-tcp.c b/migration-tcp.c index 999d4c9aac..f6b2288201 100644 --- a/migration-tcp.c +++ b/migration-tcp.c @@ -75,30 +75,22 @@ static void tcp_wait_for_connect(void *opaque) } } -MigrationState *tcp_start_outgoing_migration(Monitor *mon, - const char *host_port, - int64_t bandwidth_limit, - int detach, - int blk, - int inc) +int tcp_start_outgoing_migration(MigrationState *s, const char *host_port) { struct sockaddr_in addr; - MigrationState *s; int ret; - if (parse_host_port(&addr, host_port) < 0) - return NULL; - - s = migrate_new(mon, bandwidth_limit, detach, blk, inc); - + ret = parse_host_port(&addr, host_port); + if (ret < 0) { + return ret; + } s->get_error = socket_errno; s->write = socket_write; s->close = tcp_close; s->fd = qemu_socket(PF_INET, SOCK_STREAM, 0); if (s->fd == -1) { - g_free(s); - return NULL; + return -1; } socket_set_nonblock(s->fd); @@ -118,7 +110,7 @@ MigrationState *tcp_start_outgoing_migration(Monitor *mon, } else if (ret >= 0) migrate_fd_connect(s); - return s; + return 0; } static void tcp_accept_incoming_migration(void *opaque) diff --git a/migration-unix.c b/migration-unix.c index bee71d966c..bd8d40fe78 100644 --- a/migration-unix.c +++ b/migration-unix.c @@ -74,22 +74,13 @@ static void unix_wait_for_connect(void *opaque) } } -MigrationState *unix_start_outgoing_migration(Monitor *mon, - const char *path, - int64_t bandwidth_limit, - int detach, - int blk, - int inc) +int unix_start_outgoing_migration(MigrationState *s, const char *path) { - MigrationState *s; struct sockaddr_un addr; int ret; addr.sun_family = AF_UNIX; snprintf(addr.sun_path, sizeof(addr.sun_path), "%s", path); - - s = migrate_new(mon, bandwidth_limit, detach, blk, inc); - s->get_error = unix_errno; s->write = unix_write; s->close = unix_close; @@ -97,7 +88,7 @@ MigrationState *unix_start_outgoing_migration(Monitor *mon, s->fd = qemu_socket(PF_UNIX, SOCK_STREAM, 0); if (s->fd < 0) { DPRINTF("Unable to open socket"); - goto err_after_alloc; + goto err_after_socket; } socket_set_nonblock(s->fd); @@ -119,14 +110,13 @@ MigrationState *unix_start_outgoing_migration(Monitor *mon, if (ret >= 0) migrate_fd_connect(s); - return s; + return 0; err_after_open: close(s->fd); -err_after_alloc: - g_free(s); - return NULL; +err_after_socket: + return -1; } static void unix_accept_incoming_migration(void *opaque) diff --git a/migration.c b/migration.c index 117bdb2a4e..ca038ec8df 100644 --- a/migration.c +++ b/migration.c @@ -77,6 +77,9 @@ void process_incoming_migration(QEMUFile *f) } } +static MigrationState *migrate_new(Monitor *mon, int64_t bandwidth_limit, + int detach, int blk, int inc); + int do_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data) { MigrationState *s = NULL; @@ -85,6 +88,7 @@ int do_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data) int blk = qdict_get_try_bool(qdict, "blk", 0); int inc = qdict_get_try_bool(qdict, "inc", 0); const char *uri = qdict_get_str(qdict, "uri"); + int ret; if (current_migration && current_migration->get_status(current_migration) == MIG_STATE_ACTIVE) { @@ -96,28 +100,27 @@ int do_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data) return -1; } + s = migrate_new(mon, max_throttle, detach, blk, inc); + if (strstart(uri, "tcp:", &p)) { - s = tcp_start_outgoing_migration(mon, p, max_throttle, detach, - blk, inc); + ret = tcp_start_outgoing_migration(s, p); #if !defined(WIN32) } else if (strstart(uri, "exec:", &p)) { - s = exec_start_outgoing_migration(mon, p, max_throttle, detach, - blk, inc); + ret = exec_start_outgoing_migration(s, p); } else if (strstart(uri, "unix:", &p)) { - s = unix_start_outgoing_migration(mon, p, max_throttle, detach, - blk, inc); + ret = unix_start_outgoing_migration(s, p); } else if (strstart(uri, "fd:", &p)) { - s = fd_start_outgoing_migration(mon, p, max_throttle, detach, - blk, inc); + ret = fd_start_outgoing_migration(s, p); #endif } else { monitor_printf(mon, "unknown migration protocol: %s\n", uri); - return -1; + ret = -EINVAL; + goto free_migrate_state; } - if (s == NULL) { + if (ret < 0) { monitor_printf(mon, "migration failed\n"); - return -1; + goto free_migrate_state; } if (current_migration) { @@ -127,6 +130,9 @@ int do_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data) current_migration = s; notifier_list_notify(&migration_state_notifiers, NULL); return 0; +free_migrate_state: + g_free(s); + return -1; } int do_migrate_cancel(Monitor *mon, const QDict *qdict, QObject **ret_data) @@ -489,8 +495,8 @@ void migrate_fd_connect(MigrationState *s) migrate_fd_put_ready(s); } -MigrationState *migrate_new(Monitor *mon, int64_t bandwidth_limit, - int detach, int blk, int inc) +static MigrationState *migrate_new(Monitor *mon, int64_t bandwidth_limit, + int detach, int blk, int inc) { MigrationState *s = g_malloc0(sizeof(*s)); diff --git a/migration.h b/migration.h index 892b63650f..14c3ebccda 100644 --- a/migration.h +++ b/migration.h @@ -64,47 +64,24 @@ void do_info_migrate(Monitor *mon, QObject **ret_data); int exec_start_incoming_migration(const char *host_port); -MigrationState *exec_start_outgoing_migration(Monitor *mon, - const char *host_port, - int64_t bandwidth_limit, - int detach, - int blk, - int inc); +int exec_start_outgoing_migration(MigrationState *s, const char *host_port); int tcp_start_incoming_migration(const char *host_port); -MigrationState *tcp_start_outgoing_migration(Monitor *mon, - const char *host_port, - int64_t bandwidth_limit, - int detach, - int blk, - int inc); +int tcp_start_outgoing_migration(MigrationState *s, const char *host_port); int unix_start_incoming_migration(const char *path); -MigrationState *unix_start_outgoing_migration(Monitor *mon, - const char *path, - int64_t bandwidth_limit, - int detach, - int blk, - int inc); +int unix_start_outgoing_migration(MigrationState *s, const char *path); int fd_start_incoming_migration(const char *path); -MigrationState *fd_start_outgoing_migration(Monitor *mon, - const char *fdname, - int64_t bandwidth_limit, - int detach, - int blk, - int inc); +int fd_start_outgoing_migration(MigrationState *s, const char *fdname); void migrate_fd_error(MigrationState *s); void migrate_fd_connect(MigrationState *s); -MigrationState *migrate_new(Monitor *mon, int64_t bandwidth_limit, - int detach, int blk, int inc); - void add_migration_state_change_notifier(Notifier *notify); void remove_migration_state_change_notifier(Notifier *notify); int get_migration_state(void); -- cgit 1.4.1 From efab4718f4203132244758fbc76b8b0676b9d85d Mon Sep 17 00:00:00 2001 From: Juan Quintela Date: Wed, 23 Feb 2011 11:52:12 +0100 Subject: migration: Don't use callback on file defining it Signed-off-by: Juan Quintela --- migration-tcp.c | 4 ++-- migration-unix.c | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'migration-unix.c') diff --git a/migration-tcp.c b/migration-tcp.c index f6b2288201..bd3aa3a4a5 100644 --- a/migration-tcp.c +++ b/migration-tcp.c @@ -58,7 +58,7 @@ static void tcp_wait_for_connect(void *opaque) DPRINTF("connect completed\n"); do { ret = getsockopt(s->fd, SOL_SOCKET, SO_ERROR, (void *) &val, &valsize); - } while (ret == -1 && (s->get_error(s)) == EINTR); + } while (ret == -1 && (socket_error()) == EINTR); if (ret < 0) { migrate_fd_error(s); @@ -98,7 +98,7 @@ int tcp_start_outgoing_migration(MigrationState *s, const char *host_port) do { ret = connect(s->fd, (struct sockaddr *)&addr, sizeof(addr)); if (ret == -1) - ret = -(s->get_error(s)); + ret = -(socket_error()); if (ret == -EINPROGRESS || ret == -EWOULDBLOCK) qemu_set_fd_handler2(s->fd, NULL, NULL, tcp_wait_for_connect, s); diff --git a/migration-unix.c b/migration-unix.c index bd8d40fe78..ca6685101a 100644 --- a/migration-unix.c +++ b/migration-unix.c @@ -57,7 +57,7 @@ static void unix_wait_for_connect(void *opaque) DPRINTF("connect completed\n"); do { ret = getsockopt(s->fd, SOL_SOCKET, SO_ERROR, (void *) &val, &valsize); - } while (ret == -1 && (s->get_error(s)) == EINTR); + } while (ret == -1 && errno == EINTR); if (ret < 0) { migrate_fd_error(s); @@ -96,7 +96,7 @@ int unix_start_outgoing_migration(MigrationState *s, const char *path) do { ret = connect(s->fd, (struct sockaddr *)&addr, sizeof(addr)); if (ret == -1) - ret = -(s->get_error(s)); + ret = -errno; if (ret == -EINPROGRESS || ret == -EWOULDBLOCK) qemu_set_fd_handler2(s->fd, NULL, NULL, unix_wait_for_connect, s); @@ -129,7 +129,7 @@ static void unix_accept_incoming_migration(void *opaque) do { c = qemu_accept(s, (struct sockaddr *)&addr, &addrlen); - } while (c == -1 && socket_error() == EINTR); + } while (c == -1 && errno == EINTR); DPRINTF("accepted migration\n"); -- cgit 1.4.1 From 8414ff3bd8bfafbcb632c670f4d81c8e4f15e703 Mon Sep 17 00:00:00 2001 From: Juan Quintela Date: Wed, 23 Feb 2011 19:56:52 +0100 Subject: migration: propagate error correctly 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 call will be retry later. Signed-off-by: Juan Quintela Reviewed-by: Anthony Liguori --- migration-tcp.c | 20 +++++++++++--------- migration-unix.c | 26 ++++++++++---------------- 2 files changed, 21 insertions(+), 25 deletions(-) (limited to 'migration-unix.c') diff --git a/migration-tcp.c b/migration-tcp.c index bd3aa3a4a5..619df2108d 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 ca6685101a..f979b5fb9d 100644 --- a/migration-unix.c +++ b/migration-unix.c @@ -88,35 +88,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) -- cgit 1.4.1 From ee86c61f285042386c0a27edf69300627a1987b4 Mon Sep 17 00:00:00 2001 From: Juan Quintela Date: Wed, 23 Feb 2011 20:44:29 +0100 Subject: migration: make migration-{tcp,unix} consistent Files are almost identical in functionality, just remove the differences that make no sense. Signed-off-by: Juan Quintela Reviewed-by: Anthony Liguori --- migration-tcp.c | 15 ++++++++++----- migration-unix.c | 46 +++++++++++++++++++++++++--------------------- 2 files changed, 35 insertions(+), 26 deletions(-) (limited to 'migration-unix.c') diff --git a/migration-tcp.c b/migration-tcp.c index 619df2108d..5aa742c34b 100644 --- a/migration-tcp.c +++ b/migration-tcp.c @@ -48,7 +48,6 @@ static int tcp_close(MigrationState *s) return 0; } - static void tcp_wait_for_connect(void *opaque) { MigrationState *s = opaque; @@ -84,12 +83,14 @@ int tcp_start_outgoing_migration(MigrationState *s, const char *host_port) if (ret < 0) { return ret; } + s->get_error = socket_errno; s->write = socket_write; s->close = tcp_close; s->fd = qemu_socket(PF_INET, SOCK_STREAM, 0); if (s->fd == -1) { + DPRINTF("Unable to open socket"); return -socket_error(); } @@ -155,23 +156,27 @@ int tcp_start_incoming_migration(const char *host_port) int val; int s; + DPRINTF("Attempting to start an incoming migration\n"); + if (parse_host_port(&addr, host_port) < 0) { fprintf(stderr, "invalid host/port combination: %s\n", host_port); return -EINVAL; } s = qemu_socket(PF_INET, SOCK_STREAM, 0); - if (s == -1) + if (s == -1) { return -socket_error(); + } val = 1; setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (const char *)&val, sizeof(val)); - if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) == -1) + if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) == -1) { goto err; - - if (listen(s, 1) == -1) + } + if (listen(s, 1) == -1) { goto err; + } qemu_set_fd_handler2(s, NULL, tcp_accept_incoming_migration, NULL, (void *)(intptr_t)s); diff --git a/migration-unix.c b/migration-unix.c index f979b5fb9d..8596353d7d 100644 --- a/migration-unix.c +++ b/migration-unix.c @@ -86,7 +86,7 @@ int unix_start_outgoing_migration(MigrationState *s, const char *path) s->close = unix_close; s->fd = qemu_socket(PF_UNIX, SOCK_STREAM, 0); - if (s->fd < 0) { + if (s->fd == -1) { DPRINTF("Unable to open socket"); return -errno; } @@ -129,7 +129,7 @@ static void unix_accept_incoming_migration(void *opaque) if (c == -1) { fprintf(stderr, "could not accept migration connection\n"); - return; + goto out2; } f = qemu_fopen_socket(c); @@ -141,45 +141,49 @@ static void unix_accept_incoming_migration(void *opaque) process_incoming_migration(f); qemu_fclose(f); out: + close(c); +out2: qemu_set_fd_handler2(s, NULL, NULL, NULL, NULL); close(s); - close(c); } int unix_start_incoming_migration(const char *path) { - struct sockaddr_un un; - int sock; + struct sockaddr_un addr; + int s; + int ret; DPRINTF("Attempting to start an incoming migration\n"); - sock = qemu_socket(PF_UNIX, SOCK_STREAM, 0); - if (sock < 0) { + s = qemu_socket(PF_UNIX, SOCK_STREAM, 0); + if (s == -1) { fprintf(stderr, "Could not open unix socket: %s\n", strerror(errno)); - return -EINVAL; + return -errno; } - memset(&un, 0, sizeof(un)); - un.sun_family = AF_UNIX; - snprintf(un.sun_path, sizeof(un.sun_path), "%s", path); + memset(&addr, 0, sizeof(addr)); + addr.sun_family = AF_UNIX; + snprintf(addr.sun_path, sizeof(addr.sun_path), "%s", path); - unlink(un.sun_path); - if (bind(sock, (struct sockaddr*) &un, sizeof(un)) < 0) { - fprintf(stderr, "bind(unix:%s): %s\n", un.sun_path, strerror(errno)); + unlink(addr.sun_path); + if (bind(s, (struct sockaddr *) &addr, sizeof(addr)) < 0) { + ret = -errno; + fprintf(stderr, "bind(unix:%s): %s\n", addr.sun_path, strerror(errno)); goto err; } - if (listen(sock, 1) < 0) { - fprintf(stderr, "listen(unix:%s): %s\n", un.sun_path, strerror(errno)); + if (listen(s, 1) == -1) { + fprintf(stderr, "listen(unix:%s): %s\n", addr.sun_path, + strerror(errno)); + ret = -errno; goto err; } - qemu_set_fd_handler2(sock, NULL, unix_accept_incoming_migration, NULL, - (void *)(intptr_t)sock); + qemu_set_fd_handler2(s, NULL, unix_accept_incoming_migration, NULL, + (void *)(intptr_t)s); return 0; err: - close(sock); - - return -EINVAL; + close(s); + return ret; } -- cgit 1.4.1