qemu-trivial
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] nbd: Fix regression with multiple meta contexts


From: Laurent Vivier
Subject: Re: [PATCH] nbd: Fix regression with multiple meta contexts
Date: Thu, 6 Feb 2020 18:54:18 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.3.1

Le 06/02/2020 à 18:38, Eric Blake a écrit :
> Detected by a hang in the libnbd testsuite.  If a client requests
> multiple meta contexts (both base:allocation and qemu:dirty-bitmap:x)
> at the same time, our attempt to silence a false-positive warning
> about a potential uninitialized variable introduced botched logic: we
> were short-circuiting the second context, and never sending the
> NBD_REPLY_FLAG_DONE.  Combining two 'if' into one 'if/else' in
> bdf200a55 was wrong (I'm a bit embarrassed that such a change was my
> initial suggestion after the v1 patch, then I did not review the v2
> patch that actually got committed). Revert that, and instead silence
> the false positive warning by replacing 'return ret' with 'return 0'
> (the value it always has at that point in the code, even though it
> eluded the deduction abilities of the robot that reported the false
> positive).
> 
> Fixes: bdf200a5535
> Signed-off-by: Eric Blake <address@hidden>
> ---
> 
> It's never fun when a regression is caused by a patch taken through
> qemu-trivial, proving that the patch was not trivial after all.

trivial doesn't mean not reviewed...
The patch v1 was trivial, the v2 wasn't.

> 
>  nbd/server.c | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/nbd/server.c b/nbd/server.c
> index 87fcd2e7bfac..11a31094ff83 100644
> --- a/nbd/server.c
> +++ b/nbd/server.c
> @@ -2384,15 +2384,23 @@ static coroutine_fn int nbd_handle_request(NBDClient 
> *client,
>                                                 !client->export_meta.bitmap,
>                                                 NBD_META_ID_BASE_ALLOCATION,
>                                                 errp);
> -            } else {              /* client->export_meta.bitmap */
> +                if (ret < 0) {
> +                    return ret;
> +                }
> +            }
> +
> +            if (client->export_meta.bitmap) {
>                  ret = nbd_co_send_bitmap(client, request->handle,
>                                           client->exp->export_bitmap,
>                                           request->from, request->len,
>                                           dont_fragment,
>                                           true, NBD_META_ID_DIRTY_BITMAP, 
> errp);
> +                if (ret < 0) {
> +                    return ret;
> +                }
>              }
> 
> -            return ret;
> +            return 0;
>          } else {
>              return nbd_send_generic_reply(client, request->handle, -EINVAL,
>                                            "CMD_BLOCK_STATUS not negotiated",
> 

Reviewed-by: Laurent Vivier <address@hidden>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]