aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--migration.c29
-rw-r--r--migration.h2
-rw-r--r--qemu-monitor.hx2
3 files changed, 19 insertions, 14 deletions
diff --git a/migration.c b/migration.c
index 557bec4f2a..05f6cc5a0f 100644
--- a/migration.c
+++ b/migration.c
@@ -54,7 +54,7 @@ void qemu_start_incoming_migration(const char *uri)
fprintf(stderr, "unknown migration protocol: %s\n", uri);
}
-void do_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data)
+int do_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data)
{
MigrationState *s = NULL;
const char *p;
@@ -64,38 +64,43 @@ void do_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data)
if (current_migration &&
current_migration->get_status(current_migration) == MIG_STATE_ACTIVE) {
monitor_printf(mon, "migration already in progress\n");
- return;
+ return -1;
}
- if (strstart(uri, "tcp:", &p))
+ if (strstart(uri, "tcp:", &p)) {
s = tcp_start_outgoing_migration(mon, p, max_throttle, detach,
(int)qdict_get_int(qdict, "blk"),
(int)qdict_get_int(qdict, "inc"));
#if !defined(WIN32)
- else if (strstart(uri, "exec:", &p))
+ } else if (strstart(uri, "exec:", &p)) {
s = exec_start_outgoing_migration(mon, p, max_throttle, detach,
(int)qdict_get_int(qdict, "blk"),
(int)qdict_get_int(qdict, "inc"));
- else if (strstart(uri, "unix:", &p))
+ } else if (strstart(uri, "unix:", &p)) {
s = unix_start_outgoing_migration(mon, p, max_throttle, detach,
(int)qdict_get_int(qdict, "blk"),
(int)qdict_get_int(qdict, "inc"));
- else if (strstart(uri, "fd:", &p))
+ } else if (strstart(uri, "fd:", &p)) {
s = fd_start_outgoing_migration(mon, p, max_throttle, detach,
(int)qdict_get_int(qdict, "blk"),
(int)qdict_get_int(qdict, "inc"));
#endif
- else
+ } else {
monitor_printf(mon, "unknown migration protocol: %s\n", uri);
+ return -1;
+ }
- if (s == NULL)
+ if (s == NULL) {
monitor_printf(mon, "migration failed\n");
- else {
- if (current_migration)
- current_migration->release(current_migration);
+ return -1;
+ }
- current_migration = s;
+ if (current_migration) {
+ current_migration->release(current_migration);
}
+
+ current_migration = s;
+ return 0;
}
int do_migrate_cancel(Monitor *mon, const QDict *qdict, QObject **ret_data)
diff --git a/migration.h b/migration.h
index 9345d97494..385423f11d 100644
--- a/migration.h
+++ b/migration.h
@@ -52,7 +52,7 @@ struct FdMigrationState
void qemu_start_incoming_migration(const char *uri);
-void do_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data);
+int do_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data);
int do_migrate_cancel(Monitor *mon, const QDict *qdict, QObject **ret_data);
diff --git a/qemu-monitor.hx b/qemu-monitor.hx
index e987cf100c..3a1f9bc518 100644
--- a/qemu-monitor.hx
+++ b/qemu-monitor.hx
@@ -773,7 +773,7 @@ ETEXI
"shared storage with incremental copy of disk "
"(base image shared between src and destination)",
.user_print = monitor_user_noop,
- .mhandler.cmd_new = do_migrate,
+ .cmd_new_ret = do_migrate,
},