[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 06/15] nbd/server: Prepare to send extended header replies
From: |
Eric Blake |
Subject: |
[PULL 06/15] nbd/server: Prepare to send extended header replies |
Date: |
Thu, 5 Oct 2023 13:44:53 -0500 |
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
- [PULL 00/15] NBD patches through 2023-10-05, Eric Blake, 2023/10/05
- [PULL 04/15] nbd/server: Support a request payload, Eric Blake, 2023/10/05
- [PULL 05/15] nbd/server: Prepare to receive extended header requests, Eric Blake, 2023/10/05
- [PULL 01/15] mailmap: Fix Andrey Drobyshev author email, Eric Blake, 2023/10/05
- [PULL 06/15] nbd/server: Prepare to send extended header replies,
Eric Blake <=
- [PULL 07/15] nbd/server: Support 64-bit block status, Eric Blake, 2023/10/05
- [PULL 11/15] nbd/client: Accept 64-bit block status chunks, Eric Blake, 2023/10/05
- [PULL 08/15] nbd/server: Enable initial support for extended headers, Eric Blake, 2023/10/05
- [PULL 14/15] nbd/server: Prepare for per-request filtering of BLOCK_STATUS, Eric Blake, 2023/10/05
- [PULL 02/15] maint: Tweak comments in mailmap regarding SPF, Eric Blake, 2023/10/05
- [PULL 09/15] nbd/client: Plumb errp through nbd_receive_replies, Eric Blake, 2023/10/05
- [PULL 10/15] nbd/client: Initial support for extended headers, Eric Blake, 2023/10/05
- [PULL 03/15] mailmap: Fix BALATON Zoltan author email, Eric Blake, 2023/10/05
- [PULL 13/15] nbd/server: Refactor list of negotiated meta contexts, Eric Blake, 2023/10/05
- [PULL 15/15] nbd/server: Add FLAG_PAYLOAD support to CMD_BLOCK_STATUS, Eric Blake, 2023/10/05