[Libguestfs] Supporting sparse disks in nbdkit

Richard W.M. Jones rjones at redhat.com
Mon Mar 11 19:44:27 UTC 2019


On Fri, Mar 08, 2019 at 10:50:35AM -0600, Eric Blake wrote:
> >   int extents (void *handle, uint32_t count, uint64_t offset,
> >                uint32_t flags /* always 0? */,
> 
> Unless we support the REQ_ONE flag (where the client specifically wants
> only one extent returned).
...
> > nbdkit would need to do some massaging on this to get it into the
> > right format for NBD_CMD_BLOCK_STATUS.  (I'm very confused about what
> > NBD_CMD_FLAG_REQ_ONE is supposed to do.)
> 
> REQ_ONE says that a successful answer has to be exactly one extent,
> covering only the head of the region. (That is, force the server to
> behave as if obtaining information beyond the first extent is
> expensive). It also tells the server that it must not report extra
> information beyond the initial request (because at least qemu 3.0 would
> assert that the server supplied too much information).
> 
> You're also right that nbdkit can do REQ_ONE massaging, so whether we
> pass REQ_ONE on to the client or not makes it sound like the client
> needs a tri-state opt-in (no block status support, block status but let
> nbdkit handle REQ_ONE, block status and the plugin can handle REQ_ONE
> efficiently itself)

I had a think about the REQ_ONE flag a little.  What do you think
about this plan?

If NBD_CMD_FLAG_REQ_ONE is passed by the nbd client, nbdkit does not
need to pass it to the plugin.  Instead nbdkit would turn the request
into:

extents (count = 1, offset = <offset>)

The plugin could still respond with multiple extents, but nbdkit would
pick only the one covering the <offset> to send back.

In this case can_extents would return just a boolean since there is no
special supported needed by the plugin AFAICT.

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/




More information about the Libguestfs mailing list