[Libguestfs] [nbdkit PATCH 1/2] rust: Implement can_cache

Eric Blake eblake at redhat.com
Fri Aug 16 18:01:55 UTC 2019


On 8/16/19 12:08 PM, Eric Blake wrote:
> Implementing extents requires some coordination for the Rust code to
> call back into libnbdkit; I'm not familiar with Rust enough to do
> that. But with placeholders for those slots, implementing
> can_cache/cache is trivial.  This improves the situation mentioned in
> commit 031fae85.
> 
> Signed-off-by: Eric Blake <eblake at redhat.com>
> ---

> +++ b/plugins/rust/src/lib.rs
> @@ -93,6 +93,15 @@ pub struct Plugin {
>      pub magic_config_key: *const c_char,
> 
>      pub can_multi_conn: Option<extern fn (h: *mut c_void) -> c_int>,
> +
> +    // Slots for extents functions, which needs more integration.
> +    _can_extents: Option<extern fn ()>,
> +    _extents: Option<extern fn ()>,

Here, I was just copying what we had already done for the v1 fields that
should remain unused (see above, in _pread_old for example).  But is
there a saner way to write a Rust struct that reserves the space
required by the C ABI, but where the field MUST be left as NULL and not
populated with Some(...) by the end user?  Perhaps by marking the field
const, while the rest of the struct is used as a mutable?  (Doesn't
change this patch, so much as a cleanup we could apply on top to prevent
all of our _named fields from being overwritten after the initial
construction with default values).

And of course, if you want to actually implement extents, and figure out
how to expose C-based nbdkit functions to be called by Rust code, be my
guest (for .zero, we need nbdkit_set_error(), for extents, we need
nbdkit_add_extent(), and then we have several other utility functions
like nbdkit_realpath() that could be useful).

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libguestfs/attachments/20190816/bceb4247/attachment.sig>


More information about the Libguestfs mailing list