From e6745e67a3431a1fddb048d54ac8d71eda797ce4 Mon Sep 17 00:00:00 2001 From: Leo Fang Date: Thu, 9 Apr 2020 20:44:44 +0800 Subject: [PATCH] nbd: backport nbd fix from qemu upstream Revert bdf200a5535. and instead silence the false positive warning by replacing 'return ret' with 'return 0'. Signed-off-by: Pan Nengyuan --- ...gression-with-multiple-meta-contexts.patch | 60 +++++++++++++++++++ qemu.spec | 4 ++ 2 files changed, 64 insertions(+) create mode 100644 nbd-Fix-regression-with-multiple-meta-contexts.patch diff --git a/nbd-Fix-regression-with-multiple-meta-contexts.patch b/nbd-Fix-regression-with-multiple-meta-contexts.patch new file mode 100644 index 00000000..da57d2dc --- /dev/null +++ b/nbd-Fix-regression-with-multiple-meta-contexts.patch @@ -0,0 +1,60 @@ +From 73e064ccf09d908febc83761addcc6e76feabf78 Mon Sep 17 00:00:00 2001 +From: Eric Blake +Date: Thu, 6 Feb 2020 11:38:32 -0600 +Subject: [PATCH] nbd: Fix regression with multiple meta contexts + +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 +Message-Id: <20200206173832.130004-1-eblake@redhat.com> +Reviewed-by: Laurent Vivier +--- + nbd/server.c | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +diff --git a/nbd/server.c b/nbd/server.c +index 87fcd2e..11a3109 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", +-- +1.8.3.1 + diff --git a/qemu.spec b/qemu.spec index cc1eadad..6035a5fa 100644 --- a/qemu.spec +++ b/qemu.spec @@ -62,6 +62,7 @@ Patch0049: qcow2-bitmap-Fix-uint64_t-left-shift-overflow.patch Patch0050: pcie-Add-pcie-root-port-fast-plug-unplug-feature.patch Patch0051: pcie-Compat-with-devices-which-do-not-support-Link-W.patch Patch0052: util-async-Add-memory-barrier-to-aio_ctx_prepare.patch +Patch0053: nbd-Fix-regression-with-multiple-meta-contexts.patch BuildRequires: flex BuildRequires: bison @@ -397,6 +398,9 @@ getent passwd qemu >/dev/null || \ %endif %changelog +* Thu Apr 9 2020 backport nbd fix from qemu upstream +- nbd: Fix regression with multiple meta contexts + * Thu Apr 2 2020 Huawei Technologies Co., Ltd. util/async: Add memory barrier to aio_ctx_prepare -- Gitee