From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
To: qemu-block@nongnu.org, qemu-devel@nongnu.org
Cc: mreitz@redhat.com, kwolf@redhat.com, pbonzini@redhat.com,
eblake@redhat.com, vsementsov@virtuozzo.com, den@openvz.org
Subject: [Qemu-devel] [PATCH v3 04/13] nbd/server: structurize simple reply header sending
Date: Thu, 12 Oct 2017 12:53:10 +0300 [thread overview]
Message-ID: <20171012095319.136610-5-vsementsov@virtuozzo.com> (raw)
In-Reply-To: <20171012095319.136610-1-vsementsov@virtuozzo.com>
Use packed structure instead of pointer arithmetics.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
include/block/nbd.h | 6 ++++++
nbd/server.c | 36 ++++++++++++++----------------------
2 files changed, 20 insertions(+), 22 deletions(-)
diff --git a/include/block/nbd.h b/include/block/nbd.h
index 707fd37575..49008980f4 100644
--- a/include/block/nbd.h
+++ b/include/block/nbd.h
@@ -63,6 +63,12 @@ struct NBDReply {
};
typedef struct NBDReply NBDReply;
+typedef struct NBDSimpleReply {
+ uint32_t magic; /* NBD_SIMPLE_REPLY_MAGIC */
+ uint32_t error;
+ uint64_t handle;
+} QEMU_PACKED NBDSimpleReply;
+
/* Transmission (export) flags: sent from server to client during handshake,
but describe what will happen during transmission */
#define NBD_FLAG_HAS_FLAGS (1 << 0) /* Flags are there */
diff --git a/nbd/server.c b/nbd/server.c
index bc7f9f0fd6..43ade30ba3 100644
--- a/nbd/server.c
+++ b/nbd/server.c
@@ -902,26 +902,6 @@ static int nbd_receive_request(QIOChannel *ioc, NBDRequest *request,
return 0;
}
-static int nbd_send_reply(QIOChannel *ioc, NBDReply *reply, Error **errp)
-{
- uint8_t buf[NBD_REPLY_SIZE];
-
- reply->error = system_errno_to_nbd_errno(reply->error);
-
- trace_nbd_send_reply(reply->error, reply->handle);
-
- /* Reply
- [ 0 .. 3] magic (NBD_SIMPLE_REPLY_MAGIC)
- [ 4 .. 7] error (0 == no error)
- [ 7 .. 15] handle
- */
- stl_be_p(buf, NBD_SIMPLE_REPLY_MAGIC);
- stl_be_p(buf + 4, reply->error);
- stq_be_p(buf + 8, reply->handle);
-
- return nbd_write(ioc, buf, sizeof(buf), errp);
-}
-
#define MAX_NBD_REQUESTS 16
void nbd_client_get(NBDClient *client)
@@ -1208,24 +1188,36 @@ void nbd_export_close_all(void)
}
}
+static inline void set_be_simple_reply(NBDSimpleReply *reply, uint64_t error,
+ uint64_t handle)
+{
+ stl_be_p(&reply->magic, NBD_SIMPLE_REPLY_MAGIC);
+ stl_be_p(&reply->error, error);
+ stq_be_p(&reply->handle, handle);
+}
+
static int nbd_co_send_simple_reply(NBDRequestData *req, NBDReply *reply,
int len, Error **errp)
{
NBDClient *client = req->client;
+ NBDSimpleReply simple_reply;
int ret;
g_assert(qemu_in_coroutine());
trace_nbd_co_send_simple_reply(reply->handle, reply->error, len);
+ set_be_simple_reply(&simple_reply, system_errno_to_nbd_errno(reply->error),
+ reply->handle);
+
qemu_co_mutex_lock(&client->send_lock);
client->send_coroutine = qemu_coroutine_self();
if (!len) {
- ret = nbd_send_reply(client->ioc, reply, errp);
+ ret = nbd_write(client->ioc, &simple_reply, sizeof(simple_reply), NULL);
} else {
qio_channel_set_cork(client->ioc, true);
- ret = nbd_send_reply(client->ioc, reply, errp);
+ ret = nbd_write(client->ioc, &simple_reply, sizeof(simple_reply), NULL);
if (ret == 0) {
ret = nbd_write(client->ioc, req->data, len, errp);
if (ret < 0) {
--
2.11.1
next prev parent reply other threads:[~2017-10-12 9:53 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-12 9:53 [Qemu-devel] [PATCH v3 00/13] nbd minimal structured read Vladimir Sementsov-Ogievskiy
2017-10-12 9:53 ` [Qemu-devel] [PATCH v3 01/13] block/nbd-client: assert qiov len once in nbd_co_request Vladimir Sementsov-Ogievskiy
2017-10-12 21:16 ` Eric Blake
2017-10-12 9:53 ` [Qemu-devel] [PATCH v3 02/13] block/nbd-client: refactor nbd_co_receive_reply Vladimir Sementsov-Ogievskiy
2017-10-12 9:53 ` [Qemu-devel] [PATCH v3 03/13] nbd: rename some simple-request related objects to be _simple_ Vladimir Sementsov-Ogievskiy
2017-10-12 21:26 ` Eric Blake
2017-10-12 9:53 ` Vladimir Sementsov-Ogievskiy [this message]
2017-10-12 21:42 ` [Qemu-devel] [PATCH v3 04/13] nbd/server: structurize simple reply header sending Eric Blake
2017-10-12 21:47 ` Eric Blake
2017-10-12 21:52 ` Eric Blake
2017-10-12 9:53 ` [Qemu-devel] [PATCH v3 05/13] nbd/server: do not use NBDReply structure Vladimir Sementsov-Ogievskiy
2017-10-12 22:03 ` Eric Blake
2017-10-12 9:53 ` [Qemu-devel] [PATCH v3 06/13] nbd/server: refactor nbd_co_send_simple_reply parameters Vladimir Sementsov-Ogievskiy
2017-10-12 22:21 ` Eric Blake
2017-10-12 9:53 ` [Qemu-devel] [PATCH v3 07/13] nbd-server: simplify reply transmission Vladimir Sementsov-Ogievskiy
2017-10-12 22:27 ` Eric Blake
2017-10-12 22:31 ` Eric Blake
2017-10-12 22:35 ` Eric Blake
2017-10-12 9:53 ` [Qemu-devel] [PATCH v3 08/13] nbd: header constants indenting Vladimir Sementsov-Ogievskiy
2017-10-12 9:53 ` [Qemu-devel] [PATCH v3 09/13] nbd: Minimal structured read for server Vladimir Sementsov-Ogievskiy
2017-10-13 16:00 ` Eric Blake
2017-10-13 16:15 ` Eric Blake
2017-10-13 16:34 ` Vladimir Sementsov-Ogievskiy
2017-10-13 16:23 ` Vladimir Sementsov-Ogievskiy
2017-10-12 9:53 ` [Qemu-devel] [PATCH v3 10/13] nbd/client: refactor nbd_receive_starttls Vladimir Sementsov-Ogievskiy
2017-10-13 17:58 ` Eric Blake
2017-10-12 9:53 ` [Qemu-devel] [PATCH v3 11/13] nbd: share some nbd entities to be reused in block/nbd-client.c Vladimir Sementsov-Ogievskiy
2017-10-13 18:47 ` Eric Blake
2017-10-13 18:52 ` Vladimir Sementsov-Ogievskiy
2017-10-13 19:03 ` Eric Blake
2017-10-13 22:34 ` Eric Blake
2017-10-12 9:53 ` [Qemu-devel] [PATCH v3 12/13] nbd/client: prepare nbd_receive_reply for structured reply Vladimir Sementsov-Ogievskiy
2017-10-13 19:20 ` Eric Blake
2017-10-12 9:53 ` [Qemu-devel] [PATCH v3 13/13] nbd: Minimal structured read for client Vladimir Sementsov-Ogievskiy
2017-10-13 20:51 ` Eric Blake
2017-10-16 16:54 ` Vladimir Sementsov-Ogievskiy
2017-10-12 10:49 ` [Qemu-devel] [PATCH v3 00/13] nbd minimal structured read no-reply
2017-10-12 11:15 ` Vladimir Sementsov-Ogievskiy
2017-10-12 13:28 ` Eric Blake
2017-10-12 22:39 ` Eric Blake
2017-10-13 7:57 ` Vladimir Sementsov-Ogievskiy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171012095319.136610-5-vsementsov@virtuozzo.com \
--to=vsementsov@virtuozzo.com \
--cc=den@openvz.org \
--cc=eblake@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).