From nobody Mon Feb 9 08:11:36 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1507802223346866.295355377391; Thu, 12 Oct 2017 02:57:03 -0700 (PDT) Received: from localhost ([::1]:44528 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e2aEg-0003lD-Hb for importer@patchew.org; Thu, 12 Oct 2017 05:57:02 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35437) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e2aBI-0001FS-3u for qemu-devel@nongnu.org; Thu, 12 Oct 2017 05:53:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1e2aBF-0000HA-1h for qemu-devel@nongnu.org; Thu, 12 Oct 2017 05:53:32 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:37412 helo=relay.sw.ru) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1e2aBE-0000Dc-Mr for qemu-devel@nongnu.org; Thu, 12 Oct 2017 05:53:28 -0400 Received: from kvm.sw.ru (msk-vpn.virtuozzo.com [195.214.232.6]) by relay.sw.ru (8.13.4/8.13.4) with ESMTP id v9C9rJVl025088; Thu, 12 Oct 2017 12:53:21 +0300 (MSK) From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Thu, 12 Oct 2017 12:53:11 +0300 Message-Id: <20171012095319.136610-6-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20171012095319.136610-1-vsementsov@virtuozzo.com> References: <20171012095319.136610-1-vsementsov@virtuozzo.com> X-detected-operating-system: by eggs.gnu.org: OpenBSD 3.x [fuzzy] X-Received-From: 195.214.232.25 Subject: [Qemu-devel] [PATCH v3 05/13] nbd/server: do not use NBDReply structure X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, vsementsov@virtuozzo.com, mreitz@redhat.com, den@openvz.org, pbonzini@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" NBDReply structure will be upgraded in future patches to handle both simple and structured replies and will be used only in the client Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Eric Blake --- nbd/server.c | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/nbd/server.c b/nbd/server.c index 43ade30ba3..3878145f63 100644 --- a/nbd/server.c +++ b/nbd/server.c @@ -1196,7 +1196,9 @@ static inline void set_be_simple_reply(NBDSimpleReply= *reply, uint64_t error, stq_be_p(&reply->handle, handle); } =20 -static int nbd_co_send_simple_reply(NBDRequestData *req, NBDReply *reply, +static int nbd_co_send_simple_reply(NBDRequestData *req, + uint64_t handle, + uint32_t error, int len, Error **errp) { NBDClient *client =3D req->client; @@ -1205,10 +1207,10 @@ static int nbd_co_send_simple_reply(NBDRequestData = *req, NBDReply *reply, =20 g_assert(qemu_in_coroutine()); =20 - trace_nbd_co_send_simple_reply(reply->handle, reply->error, len); + trace_nbd_co_send_simple_reply(handle, error, len); =20 - set_be_simple_reply(&simple_reply, system_errno_to_nbd_errno(reply->er= ror), - reply->handle); + set_be_simple_reply(&simple_reply, system_errno_to_nbd_errno(error), + handle); =20 qemu_co_mutex_lock(&client->send_lock); client->send_coroutine =3D qemu_coroutine_self(); @@ -1323,7 +1325,6 @@ static coroutine_fn void nbd_trip(void *opaque) NBDExport *exp =3D client->exp; NBDRequestData *req; NBDRequest request =3D { 0 }; /* GCC thinks it can be used uninitia= lized */ - NBDReply reply; int ret; int flags; int reply_data_len =3D 0; @@ -1343,11 +1344,7 @@ static coroutine_fn void nbd_trip(void *opaque) goto disconnect; } =20 - reply.handle =3D request.handle; - reply.error =3D 0; - if (ret < 0) { - reply.error =3D -ret; goto reply; } =20 @@ -1366,7 +1363,6 @@ static coroutine_fn void nbd_trip(void *opaque) ret =3D blk_co_flush(exp->blk); if (ret < 0) { error_setg_errno(&local_err, -ret, "flush failed"); - reply.error =3D -ret; break; } } @@ -1375,7 +1371,6 @@ static coroutine_fn void nbd_trip(void *opaque) req->data, request.len); if (ret < 0) { error_setg_errno(&local_err, -ret, "reading from file failed"); - reply.error =3D -ret; break; } =20 @@ -1384,7 +1379,7 @@ static coroutine_fn void nbd_trip(void *opaque) break; case NBD_CMD_WRITE: if (exp->nbdflags & NBD_FLAG_READ_ONLY) { - reply.error =3D EROFS; + ret =3D -EROFS; break; } =20 @@ -1396,14 +1391,13 @@ static coroutine_fn void nbd_trip(void *opaque) req->data, request.len, flags); if (ret < 0) { error_setg_errno(&local_err, -ret, "writing to file failed"); - reply.error =3D -ret; } =20 break; case NBD_CMD_WRITE_ZEROES: if (exp->nbdflags & NBD_FLAG_READ_ONLY) { error_setg(&local_err, "Server is read-only, return error"); - reply.error =3D EROFS; + ret =3D -EROFS; break; } =20 @@ -1418,7 +1412,6 @@ static coroutine_fn void nbd_trip(void *opaque) request.len, flags); if (ret < 0) { error_setg_errno(&local_err, -ret, "writing to file failed"); - reply.error =3D -ret; } =20 break; @@ -1430,7 +1423,6 @@ static coroutine_fn void nbd_trip(void *opaque) ret =3D blk_co_flush(exp->blk); if (ret < 0) { error_setg_errno(&local_err, -ret, "flush failed"); - reply.error =3D -ret; } =20 break; @@ -1439,25 +1431,27 @@ static coroutine_fn void nbd_trip(void *opaque) request.len); if (ret < 0) { error_setg_errno(&local_err, -ret, "discard failed"); - reply.error =3D -ret; } =20 break; default: error_setg(&local_err, "invalid request type (%" PRIu32 ") receive= d", request.type); - reply.error =3D EINVAL; + ret =3D -EINVAL; } =20 reply: if (local_err) { - /* If we are here local_err is not fatal error, already stored in - * reply.error */ + /* If we get here, local_err was not a fatal error, and should be = sent + * to the client. */ error_report_err(local_err); local_err =3D NULL; } =20 - if (nbd_co_send_simple_reply(req, &reply, reply_data_len, &local_err) = < 0) { + if (nbd_co_send_simple_reply(req, request.handle, + ret < 0 ? -ret : 0, + reply_data_len, &local_err) < 0) + { error_prepend(&local_err, "Failed to send reply: "); goto disconnect; } --=20 2.11.1