[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 08/33] migration: push Error **errp into loadvm_process_command()
From: |
Daniel P . Berrangé |
Subject: |
[PATCH 08/33] migration: push Error **errp into loadvm_process_command() |
Date: |
Thu, 4 Feb 2021 17:18:42 +0000 |
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>
---
migration/savevm.c | 87 ++++++++++++++++++++++++++++++++++------------
1 file changed, 64 insertions(+), 23 deletions(-)
diff --git a/migration/savevm.c b/migration/savevm.c
index 350d5a315a..450c36994f 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -2223,34 +2223,37 @@ static int
loadvm_process_enable_colo(MigrationIncomingState *mis)
* Process an incoming 'QEMU_VM_COMMAND'
* 0 just a normal return
* LOADVM_QUIT All good, but exit the loop
- * <0 Error
+ * -1 Error
*/
-static int loadvm_process_command(QEMUFile *f)
+static int loadvm_process_command(QEMUFile *f, Error **errp)
{
MigrationIncomingState *mis = migration_incoming_get_current();
uint16_t cmd;
uint16_t len;
uint32_t tmp32;
+ int ret;
cmd = qemu_get_be16(f);
len = qemu_get_be16(f);
/* Check validity before continue processing of cmds */
if (qemu_file_get_error(f)) {
- return qemu_file_get_error(f);
+ error_setg(errp, "device state stream has error: %d",
+ qemu_file_get_error(f));
+ return -1;
}
trace_loadvm_process_command(cmd, len);
if (cmd >= MIG_CMD_MAX || cmd == MIG_CMD_INVALID) {
- error_report("MIG_CMD 0x%x unknown (len 0x%x)", cmd, len);
- return -EINVAL;
+ error_setg(errp, "MIG_CMD 0x%x unknown (len 0x%x)", cmd, len);
+ return -1;
}
if (mig_cmd_args[cmd].len != -1 && mig_cmd_args[cmd].len != len) {
- error_report("%s received with bad length - expecting %zu, got %d",
- mig_cmd_args[cmd].name,
- (size_t)mig_cmd_args[cmd].len, len);
- return -ERANGE;
+ error_setg(errp, "%s received with bad length - expecting %zu, got %d",
+ mig_cmd_args[cmd].name,
+ (size_t)mig_cmd_args[cmd].len, len);
+ return -1;
}
switch (cmd) {
@@ -2262,7 +2265,7 @@ static int loadvm_process_command(QEMUFile *f)
}
mis->to_src_file = qemu_file_get_return_path(f);
if (!mis->to_src_file) {
- error_report("CMD_OPEN_RETURN_PATH failed");
+ error_setg(errp, "CMD_OPEN_RETURN_PATH failed");
return -1;
}
break;
@@ -2271,36 +2274,76 @@ static int loadvm_process_command(QEMUFile *f)
tmp32 = qemu_get_be32(f);
trace_loadvm_process_command_ping(tmp32);
if (!mis->to_src_file) {
- error_report("CMD_PING (0x%x) received with no return path",
- tmp32);
+ error_setg(errp, "CMD_PING (0x%x) received with no return path",
+ tmp32);
return -1;
}
migrate_send_rp_pong(mis, tmp32);
break;
case MIG_CMD_PACKAGED:
- return loadvm_handle_cmd_packaged(mis);
+ ret = loadvm_handle_cmd_packaged(mis);
+ if (ret < 0) {
+ error_setg(errp, "Failed to load device state command: %d", ret);
+ return -1;
+ }
+ return ret;
case MIG_CMD_POSTCOPY_ADVISE:
- return loadvm_postcopy_handle_advise(mis, len);
+ ret = loadvm_postcopy_handle_advise(mis, len);
+ if (ret < 0) {
+ error_setg(errp, "Failed to load device state command: %d", ret);
+ return -1;
+ }
+ return ret;
case MIG_CMD_POSTCOPY_LISTEN:
- return loadvm_postcopy_handle_listen(mis);
+ ret = loadvm_postcopy_handle_listen(mis);
+ if (ret < 0) {
+ error_setg(errp, "Failed to load device state command: %d", ret);
+ return -1;
+ }
+ return ret;
case MIG_CMD_POSTCOPY_RUN:
- return loadvm_postcopy_handle_run(mis);
+ ret = loadvm_postcopy_handle_run(mis);
+ if (ret < 0) {
+ error_setg(errp, "Failed to load device state command: %d", ret);
+ return -1;
+ }
+ return ret;
case MIG_CMD_POSTCOPY_RAM_DISCARD:
- return loadvm_postcopy_ram_handle_discard(mis, len);
+ ret = loadvm_postcopy_ram_handle_discard(mis, len);
+ if (ret < 0) {
+ error_setg(errp, "Failed to load device state command: %d", ret);
+ return -1;
+ }
+ return ret;
case MIG_CMD_POSTCOPY_RESUME:
- return loadvm_postcopy_handle_resume(mis);
+ ret = loadvm_postcopy_handle_resume(mis);
+ if (ret < 0) {
+ error_setg(errp, "Failed to load device state command: %d", ret);
+ return -1;
+ }
+ return ret;
case MIG_CMD_RECV_BITMAP:
- return loadvm_handle_recv_bitmap(mis, len);
+ ret = loadvm_handle_recv_bitmap(mis, len);
+ if (ret < 0) {
+ error_setg(errp, "Failed to load device state command: %d", ret);
+ return -1;
+ }
+ return ret;
case MIG_CMD_ENABLE_COLO:
- return loadvm_process_enable_colo(mis);
+ ret = loadvm_process_enable_colo(mis);
+ if (ret < 0) {
+ error_setg(errp, "Failed to load device state command: %d", ret);
+ return -1;
+ }
+ return ret;
}
return 0;
@@ -2618,11 +2661,9 @@ retry:
}
break;
case QEMU_VM_COMMAND:
- ret = loadvm_process_command(f);
+ ret = loadvm_process_command(f, errp);
trace_qemu_loadvm_state_section_command(ret);
if (ret < 0) {
- error_setg(errp,
- "Failed to load device state command: %d", ret);
goto out;
}
if (ret == LOADVM_QUIT) {
--
2.29.2
- Re: [PATCH 07/33] migration: push Error **errp into qemu_loadvm_section_part_end(), (continued)
- [PATCH 09/33] migration: push Error **errp into loadvm_handle_cmd_packaged(), Daniel P . Berrangé, 2021/02/04
- [PATCH 03/33] migration: push Error **errp into qemu_loadvm_state_setup(), Daniel P . Berrangé, 2021/02/04
- [PATCH 05/33] migration: push Error **errp into qemu_loadvm_state_main(), Daniel P . Berrangé, 2021/02/04
- [PATCH 06/33] migration: push Error **errp into qemu_loadvm_section_start_full(), Daniel P . Berrangé, 2021/02/04
- [PATCH 08/33] migration: push Error **errp into loadvm_process_command(),
Daniel P . Berrangé <=
- [PATCH 10/33] migration: push Error **errp into loadvm_postcopy_handle_advise(), Daniel P . Berrangé, 2021/02/04
- [PATCH 11/33] migration: push Error **errp into ram_postcopy_incoming_init(), Daniel P . Berrangé, 2021/02/04
- [PATCH 13/33] migration: push Error **errp into loadvm_postcopy_handle_run(), Daniel P . Berrangé, 2021/02/04
- [PATCH 12/33] migration: push Error **errp into loadvm_postcopy_handle_listen(), Daniel P . Berrangé, 2021/02/04
- [PATCH 15/33] migration: make loadvm_postcopy_handle_resume() void, Daniel P . Berrangé, 2021/02/04
- [PATCH 14/33] migration: push Error **errp into loadvm_postcopy_ram_handle_discard(), Daniel P . Berrangé, 2021/02/04