On Mon, Jun 12, 2023 at 02:24:52PM -0500, Eric Blake wrote:
> On Mon, Jun 12, 2023 at 06:07:59PM +0300, Vladimir Sementsov-Ogievskiy wrote:
> > On 08.06.23 16:56, Eric Blake wrote:
> > > The upcoming patches for 64-bit extensions requires various points in
> > > the protocol to make decisions based on what was negotiated.  While we
> > > could easily add a 'bool extended_headers' alongside the existing
> > > 'bool structured_reply', this does not scale well if more modes are
> > > added in the future.  Better is to expose the mode enum added in the
> > > previous patch out to a wider use in the code base.
> > > 
> > > Where the code previously checked for structured_reply being set or
> > > clear, it now prefers checking for an inequality; this works because
> > > the nodes are in a continuum of increasing abilities, and allows us to
> > > touch fewer places if we ever insert other modes in the middle of the
> > > enum.  There should be no semantic change in this patch.
> > > 
> > > Signed-off-by: Eric Blake <ebl...@redhat.com>
> > > ---
> > > 
> > > v4: new patch, expanding enum idea from v3 4/14
> > > ---
> > 
> > [..]
> > 
> > > diff --git a/nbd/server.c b/nbd/server.c
> > > index 8486b64b15d..bade4f7990c 100644
> > > --- a/nbd/server.c
> > > +++ b/nbd/server.c
> 
> > > @@ -1261,13 +1262,13 @@ static int nbd_negotiate_options(NBDClient 
> > > *client, Error **errp)
> > >               case NBD_OPT_STRUCTURED_REPLY:
> > >                   if (length) {
> > >                       ret = nbd_reject_length(client, false, errp);
> > > -                } else if (client->structured_reply) {
> > > +                } else if (client->mode >= NBD_MODE_STRUCTURED) {
> > >                       ret = nbd_negotiate_send_rep_err(
> > >                           client, NBD_REP_ERR_INVALID, errp,
> > >                           "structured reply already negotiated");
> > >                   } else {
> > >                       ret = nbd_negotiate_send_rep(client, NBD_REP_ACK, 
> > > errp);
> > > -                    client->structured_reply = true;
> > > +                    client->mode = NBD_MODE_STRUCTURED;
> > 
> > Hmm. in all other cases in server code client.mode remains zero = OLDSTYLE, 
> > which is not quite correct.
> 
> Good catch.  Consider this squashed in (note that as a server we NEVER
> talk NBD_MODE_OLDSTYLE - we ripped that out back in commit 7f7dfe2a;
> but whether we end up on EXPORT_NAME or SIMPLE depends on the client's
> response to our initial flag advertisement.  The only reason I didn't
> spot it sooner is that in the server, all subsequent checks of
> client->mode grouped OLDSTYLE, EXPORT_NAME, and SIMPLE into the same
> handling.

To move things along, I have now staged 1-8 in my NBD queue for a pull
request, and will then repost this patch and the remainder of the
series as v5, to make it easier to pick up the final needed R-b.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org
_______________________________________________
Libguestfs mailing list
Libguestfs@redhat.com
https://listman.redhat.com/mailman/listinfo/libguestfs

Reply via email to