From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Arun Menon <armenon@redhat.com>
Cc: qemu-devel@nongnu.org, "Michael S. Tsirkin" <mst@redhat.com>,
"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
"Cornelia Huck" <cohuck@redhat.com>,
"Halil Pasic" <pasic@linux.ibm.com>,
"Eric Farman" <farman@linux.ibm.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
"David Hildenbrand" <david@redhat.com>,
"Ilya Leoshkevich" <iii@linux.ibm.com>,
"Thomas Huth" <thuth@redhat.com>,
"Christian Borntraeger" <borntraeger@linux.ibm.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Fam Zheng" <fam@euphon.net>,
"Nicholas Piggin" <npiggin@gmail.com>,
"Daniel Henrique Barboza" <danielhb413@gmail.com>,
"Harsh Prateek Bora" <harshpb@linux.ibm.com>,
"Alex Williamson" <alex.williamson@redhat.com>,
"Cédric Le Goater" <clg@redhat.com>,
"Peter Xu" <peterx@redhat.com>, "Fabiano Rosas" <farosas@suse.de>,
"Hailiang Zhang" <zhanghailiang@xfusion.com>,
"Steve Sistare" <steven.sistare@oracle.com>,
qemu-s390x@nongnu.org, qemu-ppc@nongnu.org,
"Stefan Berger" <stefanb@linux.vnet.ibm.com>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Alex Bennée" <alex.bennee@linaro.org>,
"Akihiko Odaki" <odaki@rsg.ci.i.u-tokyo.ac.jp>,
"Dmitry Osipenko" <dmitry.osipenko@collabora.com>,
"Matthew Rosato" <mjrosato@linux.ibm.com>
Subject: Re: [PATCH v5 22/23] migration: Add error-parameterized function variants in VMSD struct
Date: Thu, 17 Jul 2025 18:36:52 +0100 [thread overview]
Message-ID: <aHk0tEOhhoRfVsxE@redhat.com> (raw)
In-Reply-To: <20250717-propagate_tpm_error-v5-22-1f406f88ee65@redhat.com>
On Thu, Jul 17, 2025 at 06:07:45AM +0530, Arun Menon wrote:
> - We need to have good error reporting in the callbacks in
> VMStateDescription struct. Specifically pre_save, post_save,
> pre_load and post_load callbacks.
> - It is not possible to change these functions everywhere in one
> patch, therefore, we introduce a duplicate set of callbacks
> with Error object passed to them.
> - So, in this commit, we implement 'errp' variants of these callbacks,
> introducing an explicit Error object parameter.
> - This is a functional step towards transitioning the entire codebase
> to the new error-parameterized functions.
> - Deliberately called in mutual exclusion from their counterparts,
> to prevent conflicts during the transition.
> - New impls should preferentally use 'errp' variants of
> these methods, and existing impls incrementally converted.
> The variants without 'errp' are intended to be removed
> once all usage is converted.
>
> Signed-off-by: Arun Menon <armenon@redhat.com>
> ---
> include/migration/vmstate.h | 11 +++++++++++
> migration/vmstate.c | 36 +++++++++++++++++++++++++++++++-----
> 2 files changed, 42 insertions(+), 5 deletions(-)
> @@ -524,7 +542,9 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd,
> if (ret) {
> error_setg(errp, "Save of field %s/%s failed",
> vmsd->name, field->name);
> - if (vmsd->post_save) {
> + if (vmsd->post_save_errp) {
> + vmsd->post_save_errp(opaque, errp);
We are already in an error path here, and we set 'errp' just a few lines
above. If post_save_errp tries to set it too, then we're doomed.
You'll need to pass an &Local_err in here, and then append it to the
current error.
> + } else if (vmsd->post_save) {
> vmsd->post_save(opaque);
> }
> return ret;
> @@ -552,7 +572,13 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd,
>
> ret = vmstate_subsection_save(f, vmsd, opaque, vmdesc, errp);
Potentially set 'errp'
> - if (vmsd->post_save) {
> + if (vmsd->post_save_errp) {
> + int ps_ret = vmsd->post_save_errp(opaque, errp);
so must not be passing 'errp' here.
> + if (!ret && ps_ret) {
> + ret = ps_ret;
> + error_prepend(errp, "post-save failed: %s ", vmsd->name);
> + }
> + } else if (vmsd->post_save) {
> int ps_ret = vmsd->post_save(opaque);
> if (!ret && ps_ret) {
> ret = ps_ret;
>
> --
> 2.50.0
>
>
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
next prev parent reply other threads:[~2025-07-17 20:14 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-17 0:37 [PATCH v5 00/23] migration: propagate vTPM errors using Error objects Arun Menon
2025-07-17 0:37 ` [PATCH v5 01/23] migration: push Error **errp into vmstate_subsection_load() Arun Menon
2025-07-17 16:14 ` Daniel P. Berrangé
2025-07-17 0:37 ` [PATCH v5 02/23] migration: push Error **errp into vmstate_load_state() Arun Menon
2025-07-17 16:32 ` Daniel P. Berrangé
2025-07-18 16:27 ` Arun Menon
2025-07-17 0:37 ` [PATCH v5 03/23] migration: push Error **errp into qemu_loadvm_state_header() Arun Menon
2025-07-17 16:36 ` Daniel P. Berrangé
2025-07-17 0:37 ` [PATCH v5 04/23] migration: push Error **errp into vmstate_load() Arun Menon
2025-07-17 16:38 ` Daniel P. Berrangé
2025-07-17 0:37 ` [PATCH v5 05/23] migration: push Error **errp into qemu_loadvm_section_start_full() Arun Menon
2025-07-17 16:47 ` Daniel P. Berrangé
2025-07-17 0:37 ` [PATCH v5 06/23] migration: push Error **errp into qemu_loadvm_section_part_end() Arun Menon
2025-07-17 16:48 ` Daniel P. Berrangé
2025-07-17 0:37 ` [PATCH v5 07/23] migration: push Error **errp into loadvm_process_command() Arun Menon
2025-07-17 16:54 ` Daniel P. Berrangé
2025-07-17 17:17 ` Daniel P. Berrangé
2025-07-17 0:37 ` [PATCH v5 08/23] migration: push Error **errp into loadvm_handle_cmd_packaged() Arun Menon
2025-07-17 16:55 ` Daniel P. Berrangé
2025-07-17 0:37 ` [PATCH v5 09/23] migration: push Error **errp into ram_postcopy_incoming_init() Arun Menon
2025-07-17 3:34 ` Akihiko Odaki
2025-07-17 8:06 ` Arun Menon
2025-07-17 17:02 ` Daniel P. Berrangé
2025-07-18 4:28 ` Akihiko Odaki
2025-07-17 0:37 ` [PATCH v5 10/23] migration: push Error **errp into loadvm_postcopy_handle_advise() Arun Menon
2025-07-17 17:09 ` Daniel P. Berrangé
2025-07-17 0:37 ` [PATCH v5 11/23] migration: push Error **errp into loadvm_postcopy_handle_listen() Arun Menon
2025-07-17 17:11 ` Daniel P. Berrangé
2025-07-17 0:37 ` [PATCH v5 12/23] migration: push Error **errp into loadvm_postcopy_handle_run() Arun Menon
2025-07-17 17:13 ` Daniel P. Berrangé
2025-07-17 0:37 ` [PATCH v5 13/23] migration: push Error **errp into loadvm_postcopy_ram_handle_discard() Arun Menon
2025-07-17 0:37 ` [PATCH v5 14/23] migration: make loadvm_postcopy_handle_resume() void Arun Menon
2025-07-17 17:15 ` Daniel P. Berrangé
2025-07-17 0:37 ` [PATCH v5 15/23] migration: push Error **errp into loadvm_handle_recv_bitmap() Arun Menon
2025-07-17 17:18 ` Daniel P. Berrangé
2025-07-17 0:37 ` [PATCH v5 16/23] migration: push Error **errp into loadvm_process_enable_colo() Arun Menon
2025-07-17 3:26 ` Akihiko Odaki
2025-07-17 8:13 ` Arun Menon
2025-07-17 0:37 ` [PATCH v5 17/23] migration: push Error **errp into loadvm_postcopy_handle_switchover_start() Arun Menon
2025-07-17 17:20 ` Daniel P. Berrangé
2025-07-17 0:37 ` [PATCH v5 18/23] migration: push Error **errp into qemu_loadvm_state_main() Arun Menon
2025-07-17 17:25 ` Daniel P. Berrangé
2025-07-17 0:37 ` [PATCH v5 19/23] migration: push Error **errp into qemu_loadvm_state() Arun Menon
2025-07-17 17:28 ` Daniel P. Berrangé
2025-07-17 0:37 ` [PATCH v5 20/23] migration: push Error **errp into qemu_load_device_state() Arun Menon
2025-07-17 17:30 ` Daniel P. Berrangé
2025-07-17 0:37 ` [PATCH v5 21/23] migration: Capture error in postcopy_ram_listen_thread() Arun Menon
2025-07-17 17:33 ` Daniel P. Berrangé
2025-07-17 0:37 ` [PATCH v5 22/23] migration: Add error-parameterized function variants in VMSD struct Arun Menon
2025-07-17 17:36 ` Daniel P. Berrangé [this message]
2025-07-17 0:37 ` [PATCH v5 23/23] backends/tpm: Propagate vTPM error on migration failure Arun Menon
2025-07-17 17:37 ` Daniel P. Berrangé
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=aHk0tEOhhoRfVsxE@redhat.com \
--to=berrange@redhat.com \
--cc=alex.bennee@linaro.org \
--cc=alex.williamson@redhat.com \
--cc=armenon@redhat.com \
--cc=borntraeger@linux.ibm.com \
--cc=clg@redhat.com \
--cc=cohuck@redhat.com \
--cc=danielhb413@gmail.com \
--cc=david@redhat.com \
--cc=dmitry.osipenko@collabora.com \
--cc=fam@euphon.net \
--cc=farman@linux.ibm.com \
--cc=farosas@suse.de \
--cc=harshpb@linux.ibm.com \
--cc=iii@linux.ibm.com \
--cc=marcandre.lureau@redhat.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=mjrosato@linux.ibm.com \
--cc=mst@redhat.com \
--cc=npiggin@gmail.com \
--cc=odaki@rsg.ci.i.u-tokyo.ac.jp \
--cc=pasic@linux.ibm.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=qemu-s390x@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=stefanb@linux.vnet.ibm.com \
--cc=steven.sistare@oracle.com \
--cc=thuth@redhat.com \
--cc=zhanghailiang@xfusion.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).