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

Martin Kletzander mkletzan at redhat.com
Tue Mar 12 12:48:26 UTC 2019


On Tue, Mar 12, 2019 at 12:41:44PM +0000, Richard W.M. Jones wrote:
>On Tue, Mar 12, 2019 at 01:23:37PM +0100, Martin Kletzander wrote:
>> >+=head2 C<.extents>
>> >+
>> >+ int zero (void *handle, uint32_t count, uint64_t offset, uint32_t flags,
>>
>> s/zero/extents/
>
>Oops.
>
>> >+  if (f->filter.extents)
>> >+    return f->filter.extents (&next_ops, &nxdata, handle,
>> >+                              count, offset, flags,
>> >+                              nr_extents, extents, err);
>> >+  else
>> >+    return f->backend.next->extents (f->backend.next, conn,
>> >+                                     count, offset, flags,
>> >+                                     nr_extents, extents, err);
>>
>> Do I understand it correctly that if a filter does not support
>> extents, then its function will only be applied on the allocated
>> blocks?  It makes sense, but I feel like it would be nice to have
>> that mentioned somewhere.
>
>No.  The code snippet above allows filters to intercept the extents
>call and modify it (either on the way in, or the way out, or most
>likely in this case both).  The conditional ‘if (f->filter.extents)’
>is checking if the filter has an extents callback, which is the
>callback that the filter has to provide to do this interception.
>
>I think most filters will need to be adjusted by adding an extents
>callback.  Certainly any filter which deals with offsets (most
>obviously nbdkit-offset-filter, nbdkit-partition-filter) will need to
>implement the .extents call and both adjust the offset parameter that
>is passed down, and examine the list of extents being returned through
>the filter and adjust the offsets inside that list.
>
>This is the broad reason why we don't offer a stable API for filters
>(unlike plugins).  Nor do we advise that it's a good idea to
>distribute filters separately from nbdkit.  If an old filter was used
>with a plugin which was using the extents API then the filter would
>basically corrupt data.
>

Oh, ok, makes sense.

>> Other than that it looks OK to me, I'll try to cook up a test filter
>> to test this, but mainly as a fun exercise for myself.
>
>So note at the moment this patch doesn't really do anything.  nbdkit
>server still doesn't support block status, so neither of the functions
>will ever be called.  This patch was just for discussion about what
>the plugin API might look like.
>

I'll have it prepared when the time comes then.

>Rich.
>
>-- 
>Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
>Read my programming and virtualization blog: http://rwmj.wordpress.com
>virt-df lists disk usage of guests without needing to install any
>software inside the virtual machine.  Supports Linux and Windows.
>http://people.redhat.com/~rjones/virt-df/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libguestfs/attachments/20190312/605290eb/attachment.sig>


More information about the Libguestfs mailing list