[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v5 08/17] nbd/server: Prepare to send extended header replies
From: |
Eric Blake |
Subject: |
[PATCH v5 08/17] nbd/server: Prepare to send extended header replies |
Date: |
Thu, 10 Aug 2023 12:36:55 -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>
---
v5: s/iov->iov_len/iov[0].iov_len/ [Vladimir], add R-b
v4: new patch, split out from v3 9/14
---
nbd/server.c | 30 ++++++++++++++++++++++--------
1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/nbd/server.c b/nbd/server.c
index 566afe9527c..5c06a6466ec 100644
--- a/nbd/server.c
+++ b/nbd/server.c
@@ -1950,8 +1950,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++) {
@@ -1959,12 +1957,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,
@@ -2515,6 +2527,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
- [PATCH v5 00/17] qemu patches for 64-bit NBD extensions, Eric Blake, 2023/08/10
- [PATCH v5 01/17] nbd: Replace bool structured_reply with mode enum, Eric Blake, 2023/08/10
- [PATCH v5 02/17] nbd/client: Pass mode through to nbd_send_request, Eric Blake, 2023/08/10
- [PATCH v5 04/17] nbd: Prepare for 64-bit request effect lengths, Eric Blake, 2023/08/10
- [PATCH v5 03/17] nbd: Add types for extended headers, Eric Blake, 2023/08/10
- [PATCH v5 07/17] nbd/server: Prepare to receive extended header requests, Eric Blake, 2023/08/10
- [PATCH v5 08/17] nbd/server: Prepare to send extended header replies,
Eric Blake <=
- [PATCH v5 05/17] nbd/server: Refactor handling of command sanity checks, Eric Blake, 2023/08/10
- [PATCH v5 06/17] nbd/server: Support a request payload, Eric Blake, 2023/08/10
- [PATCH v5 09/17] nbd/server: Support 64-bit block status, Eric Blake, 2023/08/10
- [PATCH v5 12/17] nbd/client: Initial support for extended headers, Eric Blake, 2023/08/10
- [PATCH v5 11/17] nbd/client: Plumb errp through nbd_receive_replies, Eric Blake, 2023/08/10
- [PATCH v5 14/17] nbd/client: Request extended headers during negotiation, Eric Blake, 2023/08/10
- [PATCH v5 10/17] nbd/server: Enable initial support for extended headers, Eric Blake, 2023/08/10
- [PATCH v5 13/17] nbd/client: Accept 64-bit block status chunks, Eric Blake, 2023/08/10
- [PATCH v5 16/17] nbd/server: Prepare for per-request filtering of BLOCK_STATUS, Eric Blake, 2023/08/10
- [PATCH v5 17/17] nbd/server: Add FLAG_PAYLOAD support to CMD_BLOCK_STATUS, Eric Blake, 2023/08/10