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 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).