From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
Cc: Markus Armbruster <armbru@redhat.com>,
peterx@redhat.com, stefanb@linux.vnet.ibm.com, farosas@suse.de,
qemu-devel@nongnu.org
Subject: Re: [PATCH] migration: vmsd errp handlers: return bool
Date: Mon, 20 Oct 2025 12:40:27 +0100 [thread overview]
Message-ID: <aPYfqzljT3q2noDb@redhat.com> (raw)
In-Reply-To: <0ce2f913-36c2-44a2-8141-256ff847529d@yandex-team.ru>
On Mon, Oct 20, 2025 at 02:22:22PM +0300, Vladimir Sementsov-Ogievskiy wrote:
> On 20.10.25 14:05, Markus Armbruster wrote:
> > Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> writes:
> >
> > > Recently we moved to returning errp. Why to keep int return value?
> > > Generally it doesn't help: you can't use in a logic of handling
> > > an error, as you are never sure, that in future the logic in
> > > the stack will not change: it may start to return another error
> > > code in the same case, or return same error code in another case.
> > >
> > > Actually, we can only rely on concrete errno code when get it
> > > _directly_ from documented library function or syscall. This way we
> > > handle for example EINTR. But later in a stack, we can only add
> > > this errno to the textual error by strerror().
> >
> > It's a matter of the function's contract, actually.
> >
> > If the contract is "Return negative value on failure", checking for
> > failure is all you can do with it. Same information as "Return false on
> > failure".
> >
> > If the contract is "Return negative errno on failure", the function is
> > responsible for returning values that make sense. Ideally, the contract
> > spells them all out.
> >
>
> Do you know an example in code where we have both errno return value
> and errp, and the return value make sense and used by callers?
If there are examples of that, I would generally consider them to be
bugs.
IMHO if a method is using "Error **errp", then it should be considered
forbidden to return 'errno' values.
If there is a need for distinguishing some cases from others, then keep
with int '0/-1' example, but turn it into a multi-value return such as
1/0/-1, or 0/-1/-2/-3/..., etc with named constants for the unusual
scenarios. An example of that would be QIOChannel were we introduced
"#define QIO_CHANNEL_ERR_BLOCK -2" to replace the need for EAGAIN checks
in callers.
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-10-20 11:41 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-20 9:19 [PATCH] migration: vmsd errp handlers: return bool Vladimir Sementsov-Ogievskiy
2025-10-20 11:05 ` Markus Armbruster
2025-10-20 11:22 ` Vladimir Sementsov-Ogievskiy
2025-10-20 11:40 ` Daniel P. Berrangé [this message]
2025-10-20 14:34 ` Markus Armbruster
2025-10-20 15:05 ` Vladimir Sementsov-Ogievskiy
2025-10-20 16:40 ` Markus Armbruster
2025-10-20 18:43 ` Vladimir Sementsov-Ogievskiy
2025-10-21 11:36 ` Markus Armbruster
2025-10-21 11:48 ` Vladimir Sementsov-Ogievskiy
2025-10-20 15:10 ` Vladimir Sementsov-Ogievskiy
2025-10-20 13:49 ` Peter Xu
2025-10-20 15:05 ` Vladimir Sementsov-Ogievskiy
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=aPYfqzljT3q2noDb@redhat.com \
--to=berrange@redhat.com \
--cc=armbru@redhat.com \
--cc=farosas@suse.de \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanb@linux.vnet.ibm.com \
--cc=vsementsov@yandex-team.ru \
/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.