qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Juan Quintela" <quintela@redhat.com>,
	"Daniel P. Berrangé" <berrange@redhat.com>,
	"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
	"Hailiang Zhang" <zhang.zhanghailiang@huawei.com>
Subject: [PATCH 01/33] migration: push Error **errp into qemu_loadvm_state()
Date: Thu,  4 Feb 2021 17:18:35 +0000	[thread overview]
Message-ID: <20210204171907.901471-2-berrange@redhat.com> (raw)
In-Reply-To: <20210204171907.901471-1-berrange@redhat.com>

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/migration.c |  4 ++--
 migration/savevm.c    | 36 ++++++++++++++++++++----------------
 migration/savevm.h    |  2 +-
 3 files changed, 23 insertions(+), 19 deletions(-)

diff --git a/migration/migration.c b/migration/migration.c
index 1986cb8573..287a18d269 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -519,7 +519,7 @@ static void process_incoming_migration_co(void *opaque)
     postcopy_state_set(POSTCOPY_INCOMING_NONE);
     migrate_set_state(&mis->state, MIGRATION_STATUS_NONE,
                       MIGRATION_STATUS_ACTIVE);
-    ret = qemu_loadvm_state(mis->from_src_file);
+    ret = qemu_loadvm_state(mis->from_src_file, &local_err);
 
     ps = postcopy_state_get();
     trace_process_incoming_migration_co_end(ret, ps);
@@ -563,7 +563,7 @@ static void process_incoming_migration_co(void *opaque)
     }
 
     if (ret < 0) {
-        error_report("load of migration failed: %s", strerror(-ret));
+        error_report_err(local_err);
         goto fail;
     }
     mis->bh = qemu_bh_new(process_incoming_migration_bh, mis);
diff --git a/migration/savevm.c b/migration/savevm.c
index 6b320423c7..c8d93eee1e 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -2638,40 +2638,49 @@ out:
     return ret;
 }
 
-int qemu_loadvm_state(QEMUFile *f)
+int qemu_loadvm_state(QEMUFile *f, Error **errp)
 {
     MigrationIncomingState *mis = migration_incoming_get_current();
-    Error *local_err = NULL;
     int ret;
 
-    if (qemu_savevm_state_blocked(&local_err)) {
-        error_report_err(local_err);
-        return -EINVAL;
+    if (qemu_savevm_state_blocked(errp)) {
+        return -1;
     }
 
     ret = qemu_loadvm_state_header(f);
     if (ret) {
-        return ret;
+        error_setg(errp, "Error %d while loading VM state", ret);
+        return -1;
     }
 
     if (qemu_loadvm_state_setup(f) != 0) {
-        return -EINVAL;
+        error_setg(errp, "Error %d while loading VM state", -EINVAL);
+        return -1;
     }
 
     cpu_synchronize_all_pre_loadvm();
 
     ret = qemu_loadvm_state_main(f, mis);
+    if (ret < 0) {
+        error_setg(errp, "Error %d while loading VM state", ret);
+        ret = -1;
+    }
     qemu_event_set(&mis->main_thread_load_event);
 
     trace_qemu_loadvm_state_post_main(ret);
 
     if (mis->have_listen_thread) {
+        error_setg(errp, "Error %d while loading VM state", ret);
         /* Listen thread still going, can't clean up yet */
         return ret;
     }
 
     if (ret == 0) {
         ret = qemu_file_get_error(f);
+        if (ret < 0) {
+            error_setg(errp, "Error %d while loading VM state", ret);
+            ret = -1;
+        }
     }
 
     /*
@@ -2690,8 +2699,8 @@ int qemu_loadvm_state(QEMUFile *f)
         uint8_t  section_type = qemu_get_byte(f);
 
         if (section_type != QEMU_VM_VMDESCRIPTION) {
-            error_report("Expected vmdescription section, but got %d",
-                         section_type);
+            error_setg(errp, "Expected vmdescription section, but got %d",
+                       section_type);
             /*
              * It doesn't seem worth failing at this point since
              * we apparently have an otherwise valid VM state
@@ -2921,7 +2930,6 @@ void qmp_xen_load_devices_state(const char *filename, Error **errp)
 {
     QEMUFile *f;
     QIOChannelFile *ioc;
-    int ret;
 
     /* Guest must be paused before loading the device state; the RAM state
      * will already have been loaded by xc
@@ -2940,11 +2948,8 @@ void qmp_xen_load_devices_state(const char *filename, Error **errp)
     f = qemu_fopen_channel_input(QIO_CHANNEL(ioc));
     object_unref(OBJECT(ioc));
 
-    ret = qemu_loadvm_state(f);
+    qemu_loadvm_state(f, errp);
     qemu_fclose(f);
-    if (ret < 0) {
-        error_setg(errp, QERR_IO_ERROR);
-    }
     migration_incoming_state_destroy();
 }
 
@@ -3018,14 +3023,13 @@ bool load_snapshot(const char *name, const char *vmstate,
         goto err_drain;
     }
     aio_context_acquire(aio_context);
-    ret = qemu_loadvm_state(f);
+    ret = qemu_loadvm_state(f, errp);
     migration_incoming_state_destroy();
     aio_context_release(aio_context);
 
     bdrv_drain_all_end();
 
     if (ret < 0) {
-        error_setg(errp, "Error %d while loading VM state", ret);
         return false;
     }
 
diff --git a/migration/savevm.h b/migration/savevm.h
index ba64a7e271..1069e2dd4f 100644
--- a/migration/savevm.h
+++ b/migration/savevm.h
@@ -60,7 +60,7 @@ void qemu_savevm_send_colo_enable(QEMUFile *f);
 void qemu_savevm_live_state(QEMUFile *f);
 int qemu_save_device_state(QEMUFile *f);
 
-int qemu_loadvm_state(QEMUFile *f);
+int qemu_loadvm_state(QEMUFile *f, Error **errp);
 void qemu_loadvm_state_cleanup(void);
 int qemu_loadvm_state_main(QEMUFile *f, MigrationIncomingState *mis);
 int qemu_load_device_state(QEMUFile *f);
-- 
2.29.2



  reply	other threads:[~2021-02-04 18:12 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-04 17:18 [PATCH 00/33] migration: capture error reports into Error object Daniel P. Berrangé
2021-02-04 17:18 ` Daniel P. Berrangé [this message]
2021-02-04 21:57   ` [PATCH 01/33] migration: push Error **errp into qemu_loadvm_state() Philippe Mathieu-Daudé
2021-02-05  9:33     ` Daniel P. Berrangé
2021-02-05  9:35       ` Philippe Mathieu-Daudé
2021-03-11 12:38         ` Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 02/33] migration: push Error **errp into qemu_loadvm_state_header() Daniel P. Berrangé
2021-02-04 21:58   ` Philippe Mathieu-Daudé
2021-02-04 17:18 ` [PATCH 03/33] migration: push Error **errp into qemu_loadvm_state_setup() Daniel P. Berrangé
2021-02-04 21:59   ` Philippe Mathieu-Daudé
2021-02-05  7:50   ` Markus Armbruster
2021-02-04 17:18 ` [PATCH 04/33] migration: push Error **errp into qemu_load_device_state() Daniel P. Berrangé
2021-02-04 22:01   ` Philippe Mathieu-Daudé
2021-02-04 17:18 ` [PATCH 05/33] migration: push Error **errp into qemu_loadvm_state_main() Daniel P. Berrangé
2021-02-15 18:35   ` Dr. David Alan Gilbert
2021-02-15 18:58     ` Daniel P. Berrangé
2021-03-11 12:17     ` Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 06/33] migration: push Error **errp into qemu_loadvm_section_start_full() Daniel P. Berrangé
2021-02-04 22:04   ` Philippe Mathieu-Daudé
2021-02-04 17:18 ` [PATCH 07/33] migration: push Error **errp into qemu_loadvm_section_part_end() Daniel P. Berrangé
2021-02-05 16:16   ` Philippe Mathieu-Daudé
2021-02-04 17:18 ` [PATCH 08/33] migration: push Error **errp into loadvm_process_command() Daniel P. Berrangé
2021-02-05 16:18   ` Philippe Mathieu-Daudé
2021-02-04 17:18 ` [PATCH 09/33] migration: push Error **errp into loadvm_handle_cmd_packaged() Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 10/33] migration: push Error **errp into loadvm_postcopy_handle_advise() Daniel P. Berrangé
2021-02-05 16:21   ` Philippe Mathieu-Daudé
2021-02-04 17:18 ` [PATCH 11/33] migration: push Error **errp into ram_postcopy_incoming_init() Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 12/33] migration: push Error **errp into loadvm_postcopy_handle_listen() Daniel P. Berrangé
2021-02-05 16:23   ` Philippe Mathieu-Daudé
2021-02-04 17:18 ` [PATCH 13/33] migration: push Error **errp into loadvm_postcopy_handle_run() Daniel P. Berrangé
2021-02-05 16:23   ` Philippe Mathieu-Daudé
2021-02-04 17:18 ` [PATCH 14/33] migration: push Error **errp into loadvm_postcopy_ram_handle_discard() Daniel P. Berrangé
2021-02-05 16:24   ` Philippe Mathieu-Daudé
2021-02-04 17:18 ` [PATCH 15/33] migration: make loadvm_postcopy_handle_resume() void Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 16/33] migration: push Error **errp into loadvm_handle_recv_bitmap() Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 17/33] migration: push Error **errp into loadvm_process_enable_colo() Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 18/33] migration: push Error **errp into colo_init_ram_cache() Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 19/33] migration: push Error **errp into check_section_footer() Daniel P. Berrangé
2021-02-05 16:26   ` Philippe Mathieu-Daudé
2021-02-04 17:18 ` [PATCH 20/33] migration: push Error **errp into global_state_store() Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 21/33] migration: remove error reporting from qemu_fopen_bdrv() callers Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 22/33] migration: push Error **errp into qemu_savevm_state_iterate() Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 23/33] migration: simplify some error reporting in save_snapshot() Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 24/33] migration: push Error **errp into qemu_savevm_state_setup() Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 25/33] migration: push Error **errp into qemu_savevm_state_complete_precopy() Daniel P. Berrangé
2021-02-04 17:19 ` [PATCH 26/33] migration: push Error **errp into qemu_savevm_state_complete_precopy_non_iterable() Daniel P. Berrangé
2021-02-04 17:19 ` [PATCH 27/33] migration: push Error **errp into qemu_savevm_state_complete_precopy() Daniel P. Berrangé
2021-02-04 17:19 ` [PATCH 28/33] migration: push Error **errp into qemu_savevm_send_packaged() Daniel P. Berrangé
2021-02-04 17:19 ` [PATCH 29/33] migration: push Error **errp into qemu_savevm_live_state() Daniel P. Berrangé
2021-02-04 17:19 ` [PATCH 30/33] migration: push Error **errp into qemu_save_device_state() Daniel P. Berrangé
2021-02-04 17:19 ` [PATCH 31/33] migration: push Error **errp into qemu_savevm_state_resume_prepare() Daniel P. Berrangé
2021-02-04 17:19 ` [PATCH 32/33] migration: push Error **errp into postcopy_resume_handshake() Daniel P. Berrangé
2021-02-04 17:19 ` [PATCH 33/33] migration: push Error **errp into postcopy_do_resume() Daniel P. Berrangé
2021-02-04 18:22 ` [PATCH 00/33] migration: capture error reports into Error object Dr. David Alan Gilbert
2021-02-04 19:09   ` Daniel P. Berrangé
2021-02-08 13:29     ` Dr. David Alan Gilbert
2021-02-08 13:42       ` Daniel P. Berrangé
2021-02-08 14:29         ` Dr. David Alan Gilbert
2021-02-08 14:36           ` Daniel P. Berrangé
2021-02-15 18:38         ` Dr. David Alan Gilbert
2021-02-15 18:58           ` Daniel P. Berrangé
2021-02-15 19:01             ` Dr. David Alan Gilbert
2021-02-16  9:30               ` Daniel P. Berrangé
2021-02-16 19:32                 ` Dr. David Alan Gilbert

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210204171907.901471-2-berrange@redhat.com \
    --to=berrange@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    --cc=zhang.zhanghailiang@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).