From: Fabiano Rosas <farosas@suse.de>
To: Peter Xu <peterx@redhat.com>
Cc: qemu-devel@nongnu.org,
Leonardo Bras Soares Passos <lsoaresp@redhat.com>,
Juan Quintela <quintela@redhat.com>,
Lukas Straub <lukasstraub2@web.de>,
Laszlo Ersek <lersek@redhat.com>
Subject: Re: [PATCH v2 6/7] qemufile: Always return a verbose error
Date: Thu, 06 Jul 2023 10:56:58 -0300 [thread overview]
Message-ID: <87sfa1jg7p.fsf@suse.de> (raw)
In-Reply-To: <ZKXtqxmCp2cnHf8h@x1n>
Peter Xu <peterx@redhat.com> writes:
> On Wed, Jul 05, 2023 at 06:54:37PM -0300, Fabiano Rosas wrote:
>> Peter Xu <peterx@redhat.com> writes:
>>
>> > There're a lot of cases where we only have an errno set in last_error but
>> > without a detailed error description. When this happens, try to generate
>> > an error contains the errno as a descriptive error.
>> >
>> > This will be helpful in cases where one relies on the Error*. E.g.,
>> > migration state only caches Error* in MigrationState.error. With this,
>> > we'll display correct error messages in e.g. query-migrate when the error
>> > was only set by qemu_file_set_error().
>> >
>> > Signed-off-by: Peter Xu <peterx@redhat.com>
>> > ---
>> > migration/qemu-file.c | 15 ++++++++++++---
>> > 1 file changed, 12 insertions(+), 3 deletions(-)
>> >
>> > diff --git a/migration/qemu-file.c b/migration/qemu-file.c
>> > index acc282654a..419b4092e7 100644
>> > --- a/migration/qemu-file.c
>> > +++ b/migration/qemu-file.c
>> > @@ -156,15 +156,24 @@ void qemu_file_set_hooks(QEMUFile *f, const QEMUFileHooks *hooks)
>> > *
>> > * Return negative error value if there has been an error on previous
>> > * operations, return 0 if no error happened.
>> > - * Optional, it returns Error* in errp, but it may be NULL even if return value
>> > - * is not 0.
>> > *
>> > + * If errp is specified, a verbose error message will be copied over.
>> > */
>> > int qemu_file_get_error_obj(QEMUFile *f, Error **errp)
>> > {
>> > + if (!f->last_error) {
>> > + return 0;
>> > + }
>> > +
>> > + /* There is an error */
>> > if (errp) {
>> > - *errp = f->last_error_obj ? error_copy(f->last_error_obj) : NULL;
>> > + if (f->last_error_obj) {
>> > + *errp = error_copy(f->last_error_obj);
>> > + } else {
>> > + error_setg_errno(errp, -f->last_error, "Channel error");
>>
>> There are a couple of places that do:
>>
>> ret = vmstate_save(f, se, ms->vmdesc);
>> if (ret) {
>> qemu_file_set_error(f, ret);
>> break;
>> }
>>
>> and vmstate_save() can return > 0 on error. This would make this message
>> say "Unknown error". This is minor.
>>
>> But take a look at qemu_fclose(). It can return f->last_error while the
>> function documentation says it should return negative on error.
>>
>> Should we make qemu_file_set_error() check 'ret' and always set a
>> negative value for f->last_error?
>
> Yeah, maybe we can add a sanity check, but logically it's better we just
> fix vmstate_save() to make sure it always returns a <0 error.
>
> It seems to me there're so many hooks in vmstate_save_state_v() that it can
> return random things. What's the one you spot? If it's an obvious issue
> we can fix them.
I see at least:
ret = field->info->put(f, curr_elem, size, field, vmdesc_loop);
with put_power() from target/arm/machine.c returning 1.
Since vmstate_save_state_v() is quite involved I don't think we should
block this series because of it. I can do a closer audit and send a
separate patch with it.
So:
Reviewed-by: Fabiano Rosas <farosas@suse.de>
next prev parent reply other threads:[~2023-07-06 13:57 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-05 16:34 [PATCH v2 0/7] migration: Better error handling in return path thread Peter Xu
2023-07-05 16:34 ` [PATCH v2 1/7] migration: Display error in query-migrate irrelevant of status Peter Xu
2023-07-05 16:34 ` [PATCH v2 2/7] migration: Let migrate_set_error() take ownership Peter Xu
2023-07-05 20:53 ` Fabiano Rosas
2023-07-05 16:34 ` [PATCH v2 3/7] migration: Introduce migrate_has_error() Peter Xu
2023-07-05 20:55 ` Fabiano Rosas
2023-07-05 16:34 ` [PATCH v2 4/7] migration: Refactor error handling in source return path Peter Xu
2023-07-05 16:35 ` [PATCH v2 5/7] migration: Deliver return path file error to migrate state too Peter Xu
2023-07-05 16:35 ` [PATCH v2 6/7] qemufile: Always return a verbose error Peter Xu
2023-07-05 21:54 ` Fabiano Rosas
2023-07-05 22:24 ` Peter Xu
2023-07-06 13:56 ` Fabiano Rosas [this message]
2023-07-05 16:35 ` [PATCH v2 7/7] migration: Provide explicit error message for file shutdowns Peter Xu
2023-07-05 22:05 ` Fabiano Rosas
2023-07-05 22:34 ` Peter Xu
2023-07-06 13:50 ` Fabiano Rosas
2023-07-06 16:27 ` Peter Xu
2023-07-06 17:33 ` Fabiano Rosas
2023-07-06 18:08 ` Peter Xu
2023-07-06 18:47 ` Fabiano Rosas
2023-07-24 14:11 ` [PATCH v2 0/7] migration: Better error handling in return path thread Fabiano Rosas
2023-07-25 18:24 ` Fabiano Rosas
2023-07-26 16:36 ` Peter Xu
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=87sfa1jg7p.fsf@suse.de \
--to=farosas@suse.de \
--cc=lersek@redhat.com \
--cc=lsoaresp@redhat.com \
--cc=lukasstraub2@web.de \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.