On Mon, May 29, 2023 at 05:26:50PM +0300, Vladimir Sementsov-Ogievskiy wrote: > On 15.05.23 22:53, Eric Blake wrote: > > Upstream NBD now documents[1] an extension that supports 64-bit effect > > lengths in requests. As part of that extension, the size of the reply > > headers will change in order to permit a 64-bit length in the reply > > for symmetry[2]. Additionally, where the reply header is currently > > 16 bytes for simple reply, and 20 bytes for structured reply; with the > > extension enabled, there will only be one structured reply type, of 32 > > bytes. Since we are already wired up to use iovecs, it is easiest to > > allow for this change in header size by splitting each structured > > reply across two iovecs, one for the header (which will become > > variable-length in a future patch according to client negotiation), > > and the other for the payload, and removing the header from the > > payload struct definitions. Interestingly, the client side code never > > utilized the packed types, so only the server code needs to be > > updated. > > Actually, it does, since previous patch :) But, it becomes even better now? > Anyway some note somewhere is needed I think.
Oh, indeed - but only in a sizeof expression for an added assertion check, and not actually for in-memory storage. If you are envisioning a comment addition, where are you thinking it should be placed? > > > > > -static inline void set_be_chunk(NBDStructuredReplyChunk *chunk, uint16_t > > flags, > > - uint16_t type, uint64_t handle, uint32_t > > length) > > +static inline void set_be_chunk(NBDClient *client, struct iovec *iov, > > Suggestion: pass niov here too, and caluculate "length" as a sum of iov > lengths starting from second extent automatically. Makes sense. > > Also, worth documenting that set_be_chunk() expects half-initialized iov, > with .iov_base pointing to NBDReply (IN parameter) and .iov_len unset (OUT > parameter), as that's not usual practice Yeah, I'm not sure if there is a better interface, but either I come up with one, or at least better document what I landed on. > > > + uint16_t flags, uint16_t type, > > + uint64_t handle, uint32_t length) > > { > > + NBDStructuredReplyChunk *chunk = iov->iov_base; > > + > > + iov->iov_len = sizeof(*chunk); > > stl_be_p(&chunk->magic, NBD_STRUCTURED_REPLY_MAGIC); > > stw_be_p(&chunk->flags, flags); > > stw_be_p(&chunk->type, type); > > [..] > > -- > Best regards, > Vladimir > -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org