@@ -16,7 +16,7 @@
#include "qapi/qapi-types-run-state.h"
void register_global_state(void);
-int global_state_store(void);
+int global_state_store(Error **errp);
void global_state_store_running(void);
bool global_state_received(void);
RunState global_state_get_runstate(void);
@@ -29,13 +29,13 @@ typedef struct {
static GlobalState global_state;
-int global_state_store(void)
+int global_state_store(Error **errp)
{
if (!runstate_store((char *)global_state.runstate,
sizeof(global_state.runstate))) {
- error_report("runstate name too big: %s", global_state.runstate);
+ error_setg(errp, "runstate name too big: %s", global_state.runstate);
trace_migrate_state_too_big();
- return -EINVAL;
+ return -1;
}
return 0;
}
@@ -2811,6 +2811,7 @@ static int postcopy_start(MigrationState *ms)
int64_t bandwidth = migrate_max_postcopy_bandwidth();
bool restart_block = false;
int cur_state = MIGRATION_STATUS_ACTIVE;
+ Error *local_err = NULL;
if (!migrate_pause_before_switchover()) {
migrate_set_state(&ms->state, MIGRATION_STATUS_ACTIVE,
MIGRATION_STATUS_POSTCOPY_ACTIVE);
@@ -2821,9 +2822,10 @@ static int postcopy_start(MigrationState *ms)
trace_postcopy_start_set_run();
qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER, NULL);
- global_state_store();
+ global_state_store(&local_err);
ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
if (ret < 0) {
+ error_report_err(local_err);
goto fail;
}
@@ -3030,11 +3032,12 @@ static void migration_completion(MigrationState *s)
int current_active_state = s->state;
if (s->state == MIGRATION_STATUS_ACTIVE) {
+ Error *local_err = NULL;
qemu_mutex_lock_iothread();
s->downtime_start = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER, NULL);
s->vm_was_running = runstate_is_running();
- ret = global_state_store();
+ ret = global_state_store(&local_err);
if (!ret) {
bool inactivate = !migrate_colo_enabled();
@@ -3055,6 +3058,7 @@ static void migration_completion(MigrationState *s)
qemu_mutex_unlock_iothread();
if (ret < 0) {
+ error_report_err(local_err);
goto fail;
}
} else if (s->state == MIGRATION_STATUS_POSTCOPY_ACTIVE) {
@@ -2828,9 +2828,8 @@ bool save_snapshot(const char *name, bool overwrite, const char *vmstate,
saved_vm_running = runstate_is_running();
- ret = global_state_store();
- if (ret) {
- error_setg(errp, "Error saving global state");
+ ret = global_state_store(errp);
+ if (ret < 0) {
return false;
}
vm_stop(RUN_STATE_SAVE_VM);
This is an incremental step in converting vmstate loading code to report via Error objects instead of printing directly to the console/monitor. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- include/migration/global_state.h | 2 +- migration/global_state.c | 6 +++--- migration/migration.c | 8 ++++++-- migration/savevm.c | 5 ++--- 4 files changed, 12 insertions(+), 9 deletions(-)