qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Eric Blake <eblake@redhat.com>
To: qemu-devel@nongnu.org
Cc: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>,
	qemu-block@nongnu.org (open list:Network Block Dev...)
Subject: [PULL 06/15] nbd/server: Prepare to send extended header replies
Date: Thu,  5 Oct 2023 13:44:53 -0500	[thread overview]
Message-ID: <20231005184447.682556-23-eblake@redhat.com> (raw)
In-Reply-To: <20231005184447.682556-17-eblake@redhat.com>

Although extended mode is not yet enabled, once we do turn it on, we
need to reply with extended headers to all messages.  Update the low
level entry points necessary so that all other callers automatically
get the right header based on the current mode.

Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
Message-ID: <20230925192229.3186470-17-eblake@redhat.com>
---
 nbd/server.c | 30 ++++++++++++++++++++++--------
 1 file changed, 22 insertions(+), 8 deletions(-)

diff --git a/nbd/server.c b/nbd/server.c
index 501749d62b5..910c48c6467 100644
--- a/nbd/server.c
+++ b/nbd/server.c
@@ -1938,8 +1938,6 @@ static inline void set_be_chunk(NBDClient *client, struct iovec *iov,
                                 size_t niov, uint16_t flags, uint16_t type,
                                 NBDRequest *request)
 {
-    /* TODO - handle structured vs. extended replies */
-    NBDStructuredReplyChunk *chunk = iov->iov_base;
     size_t i, length = 0;

     for (i = 1; i < niov; i++) {
@@ -1947,12 +1945,26 @@ static inline void set_be_chunk(NBDClient *client, struct iovec *iov,
     }
     assert(length <= NBD_MAX_BUFFER_SIZE + sizeof(NBDStructuredReadData));

-    iov[0].iov_len = sizeof(*chunk);
-    stl_be_p(&chunk->magic, NBD_STRUCTURED_REPLY_MAGIC);
-    stw_be_p(&chunk->flags, flags);
-    stw_be_p(&chunk->type, type);
-    stq_be_p(&chunk->cookie, request->cookie);
-    stl_be_p(&chunk->length, length);
+    if (client->mode >= NBD_MODE_EXTENDED) {
+        NBDExtendedReplyChunk *chunk = iov->iov_base;
+
+        iov[0].iov_len = sizeof(*chunk);
+        stl_be_p(&chunk->magic, NBD_EXTENDED_REPLY_MAGIC);
+        stw_be_p(&chunk->flags, flags);
+        stw_be_p(&chunk->type, type);
+        stq_be_p(&chunk->cookie, request->cookie);
+        stq_be_p(&chunk->offset, request->from);
+        stq_be_p(&chunk->length, length);
+    } else {
+        NBDStructuredReplyChunk *chunk = iov->iov_base;
+
+        iov[0].iov_len = sizeof(*chunk);
+        stl_be_p(&chunk->magic, NBD_STRUCTURED_REPLY_MAGIC);
+        stw_be_p(&chunk->flags, flags);
+        stw_be_p(&chunk->type, type);
+        stq_be_p(&chunk->cookie, request->cookie);
+        stl_be_p(&chunk->length, length);
+    }
 }

 static int coroutine_fn nbd_co_send_chunk_done(NBDClient *client,
@@ -2512,6 +2524,8 @@ static coroutine_fn int nbd_send_generic_reply(NBDClient *client,
 {
     if (client->mode >= NBD_MODE_STRUCTURED && ret < 0) {
         return nbd_co_send_chunk_error(client, request, -ret, error_msg, errp);
+    } else if (client->mode >= NBD_MODE_EXTENDED) {
+        return nbd_co_send_chunk_done(client, request, errp);
     } else {
         return nbd_co_send_simple_reply(client, request, ret < 0 ? -ret : 0,
                                         NULL, 0, errp);
-- 
2.41.0



  parent reply	other threads:[~2023-10-05 18:48 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-05 18:44 [PULL 00/15] NBD patches through 2023-10-05 Eric Blake
2023-10-05 18:44 ` [PULL 01/15] mailmap: Fix Andrey Drobyshev author email Eric Blake
2023-10-05 18:44 ` [PULL 02/15] maint: Tweak comments in mailmap regarding SPF Eric Blake
2023-10-05 18:44 ` [PULL 03/15] mailmap: Fix BALATON Zoltan author email Eric Blake
2023-10-05 18:44 ` [PULL 04/15] nbd/server: Support a request payload Eric Blake
2023-10-05 18:44 ` [PULL 05/15] nbd/server: Prepare to receive extended header requests Eric Blake
2023-10-05 18:44 ` Eric Blake [this message]
2023-10-05 18:44 ` [PULL 07/15] nbd/server: Support 64-bit block status Eric Blake
2023-10-05 18:44 ` [PULL 08/15] nbd/server: Enable initial support for extended headers Eric Blake
2023-10-05 18:44 ` [PULL 09/15] nbd/client: Plumb errp through nbd_receive_replies Eric Blake
2023-10-05 18:44 ` [PULL 10/15] nbd/client: Initial support for extended headers Eric Blake
2023-10-05 18:44 ` [PULL 11/15] nbd/client: Accept 64-bit block status chunks Eric Blake
2023-10-05 18:44 ` [PULL 12/15] nbd/client: Request extended headers during negotiation Eric Blake
2023-10-05 18:45 ` [PULL 13/15] nbd/server: Refactor list of negotiated meta contexts Eric Blake
2023-10-05 18:45 ` [PULL 14/15] nbd/server: Prepare for per-request filtering of BLOCK_STATUS Eric Blake
2023-10-05 18:45 ` [PULL 15/15] nbd/server: Add FLAG_PAYLOAD support to CMD_BLOCK_STATUS Eric Blake
2023-10-10  1:28 ` [PULL 00/15] NBD patches through 2023-10-05 Stefan Hajnoczi

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=20231005184447.682556-23-eblake@redhat.com \
    --to=eblake@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=vsementsov@yandex-team.ru \
    /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).