[Libguestfs] [PATCH nbdkit v4 01/15] server: Implement extents/can_extents calls for plugins and filters.

Eric Blake eblake at redhat.com
Wed Mar 27 06:56:57 UTC 2019


On 3/26/19 4:17 PM, Richard W.M. Jones wrote:
> This pair of calls allows plugins to describe which extents in the
> virtual disk are allocated, holes or zeroes.
> ---

> +=head2 C<.extents>
> +
> + int extents (void *handle, uint32_t count, uint64_t offset,
> +              uint32_t flags, struct nbdkit_extents *extents);
> +
> +During the data serving phase, this callback is used to detect
> +allocated, sparse and zeroed regions of the disk.
> +
> +This function will not be called if C<.can_extents> returned false.
> +nbdkit's default behaviour in this case is to treat the whole virtual
> +disk as if it was allocated.
> +
> +The callback should detect and return the list of extents overlapping
> +the range C<[offset...offset+count-1]>.  The C<extents> parameter
> +points to an opaque object which the callback should fill in by
> +calling C<nbdkit_add_extent>.  See L</Extents list> below.

[1]

> +
> +If there is an error, C<.extents> should call C<nbdkit_error> with an
> +error message, and C<nbdkit_set_error> to record an appropriate error
> +(unless C<errno> is sufficient), then return C<-1>.
> +
> +=head3 Extents list
> +
> +The plugin C<extents> callback is passed an opaque pointer C<struct
> +nbdkit_extents *extents>.  This structure represents a list of
> +L<filesystem extents|https://en.wikipedia.org/wiki/Extent_(file_systems)>
> +describing which areas of the disk are allocated, which are sparse
> +(“holes”), and, if supported, which are zeroes.
> +
> +The C<extents> callback should scan the disk starting at C<offset> and
> +call C<nbdkit_add_extent> for each extent found.
> +
> +Extents overlapping the range C<[offset...offset+count-1]> should be
> +returned if possible.  However nbdkit ignores extents E<lt> offset so
> +the plugin may, if it is easier to implement, return all extent
> +information for the whole disk.  The plugin may return extents beyond
> +the end of the range.  It may also return extent information for less
> +than the whole range, but it must return at least one extent
> +overlapping C<offset>.
> +
> +The extents B<must> be added in ascending order, and B<must> be
> +contiguous.
> +
> +The C<flags> parameter may contain the flag C<NBDKIT_FLAG_REQ_ONE>
> +which means that the client is only requesting information about the
> +extent overlapping C<offset>.  The plugin may ignore this flag, or as
> +an optimization it may return just a single extent for C<offset>.

I wonder if this paragraph belongs up at [1].

Looks good to me.

-- 
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/20190327/50964752/attachment.sig>


More information about the Libguestfs mailing list