[Libguestfs] [PATCH nbdkit] Minimal implementation of NBD Structured Replies.
Richard W.M. Jones
rjones at redhat.com
Fri Mar 8 16:05:03 UTC 2019
On Fri, Mar 08, 2019 at 09:03:05AM -0600, Eric Blake wrote:
> On 3/8/19 4:04 AM, Richard W.M. Jones wrote:
> > Also we do not understand NBD_CMD_FLAG_DF, but that seems to be OK
> > because (a) we don't advertize the feature and (b) we only send back a
> > single chunk anyway.
>
> Or, we COULD advertise it because we always honor it (but that's a
> larger diffstat, and thus at odds with "minimal implementation"). Either
> way works.
What's also unclear to me is how NBD_CMD_FLAG_DF interacts with
NBD_CMD_BLOCK_STATUS. What does it mean for extents which are by
their nature fragmented?
> > +/* Structured reply types. */
> > +extern const char *name_of_nbd_reply_type (int);
> > +#define NBD_REPLY_TYPE_NONE 0
> > +#define NBD_REPLY_TYPE_OFFSET_DATA 1
> > +#define NBD_REPLY_TYPE_OFFSET_HOLE 2
> > +#define NBD_REPLY_TYPE_BLOCK_STATUS 3
> > +#define NBD_REPLY_TYPE_ERROR 32769
> > +#define NBD_REPLY_TYPE_ERROR_OFFSET 32770
>
> Worth writing these later ones in hex or via a helper macro that does
> ((1 << 15) | value)? Or would that mess up the generated
> protocol-to-lookup magic?
Could do it either way really. The sed magic uses the symbol
(eg. NBD_REPLY_TYPE_ERROR) not the value so either should work. I'll
play around with it to see which looks nicer.
> > + reply.magic = htobe32 (NBD_STRUCTURED_REPLY_MAGIC);
> > + reply.handle = handle;
> > + reply.flags = htobe16 (NBD_REPLY_FLAG_DONE);
> > + reply.type = htobe16 (NBD_REPLY_TYPE_OFFSET_DATA);
> > + reply.length = htobe32 (sizeof offset_data + count);
>
> This line is correct, but I had to remind myself of C precedence rules
> on this one; writing 'count + sizeof offset_data' instead has the same
> effect without worrying whether sizeof binds with higher or lower
> precedence than +.
Yup I'll change this.
Thanks,
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