[Libguestfs] [nbdkit PATCH v2 1/3] backend: Rework internal/filter error return semantics
Eric Blake
eblake at redhat.com
Tue Feb 6 14:42:13 UTC 2018
On 02/06/2018 01:05 AM, Richard W.M. Jones wrote:
>
> I had a think about this. How about (for the internal backend
> interface only) returning an extra ‘int *err’ parameter?
For backend only, or for backend and filters? The biggest reason for
the change is so that filters can inspect/modify the error to push over
the wire to the client. If for the filters, would it be for both the
callbacks and the next_ops functions, or just the next_ops functions?
>
> int (*pread) (struct backend *, struct connection *conn, void *buf, uint32_t count, uint64_t offset, uint32_t flags, int *err);
>
> This has some advantages:
>
> - It's explicit.
>
> - It means we preserve the convention that -1 = error
> used everywhere else in nbdkit.
>
> - Better for APIs that actually return something like get_size.
>
> - Can be both read and written.
Seems like it might be reasonable enough, even though it's a bit more
verbose; I can respin my series along those lines for comparison.
Note that get_size() doesn't send an error over the wire to the client,
so there, accessing errno in the filter doesn't buy much, and the filter
really has no need to modify errno if failing its own .get_size
callback. It's only the transmission functions (.pread, .pwrite,
.flush, .trim, .zero) where getting at the error value matters.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
More information about the Libguestfs
mailing list