[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 19/28] nbd: invert client logic for negotiating proto
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 19/28] nbd: invert client logic for negotiating protocol version |
Date: |
Tue, 16 Feb 2016 17:34:37 +0100 |
From: "Daniel P. Berrange" <address@hidden>
The nbd_receive_negotiate() method takes different code
paths based on whether 'name == NULL', and then checks
the expected protocol version in each branch.
This patch inverts the logic, so that it takes different
code paths based on what protocol version it receives and
then checks if name is NULL or not as needed.
This facilitates later code which allows the client to
be capable of using the new style protocol regardless
of whether an export name is listed or not.
Signed-off-by: Daniel P. Berrange <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
nbd/client.c | 60 +++++++++++++++++++++++++++++-------------------------------
1 file changed, 29 insertions(+), 31 deletions(-)
diff --git a/nbd/client.c b/nbd/client.c
index f6dd0a3..5064788 100644
--- a/nbd/client.c
+++ b/nbd/client.c
@@ -116,20 +116,11 @@ int nbd_receive_negotiate(QIOChannel *ioc, const char
*name, uint32_t *flags,
magic = be64_to_cpu(magic);
TRACE("Magic is 0x%" PRIx64, magic);
- if (name) {
+ if (magic == NBD_OPTS_MAGIC) {
uint32_t reserved = 0;
uint32_t opt;
uint32_t namesize;
- TRACE("Checking magic (opts_magic)");
- if (magic != NBD_OPTS_MAGIC) {
- if (magic == NBD_CLIENT_MAGIC) {
- error_setg(errp, "Server does not support export names");
- } else {
- error_setg(errp, "Bad magic received");
- }
- goto fail;
- }
if (read_sync(ioc, &tmp, sizeof(tmp)) != sizeof(tmp)) {
error_setg(errp, "Failed to read server flags");
goto fail;
@@ -142,6 +133,10 @@ int nbd_receive_negotiate(QIOChannel *ioc, const char
*name, uint32_t *flags,
goto fail;
}
/* write the export name */
+ if (!name) {
+ error_setg(errp, "Server requires an export name");
+ goto fail;
+ }
magic = cpu_to_be64(magic);
if (write_sync(ioc, &magic, sizeof(magic)) != sizeof(magic)) {
error_setg(errp, "Failed to send export name magic");
@@ -162,39 +157,42 @@ int nbd_receive_negotiate(QIOChannel *ioc, const char
*name, uint32_t *flags,
error_setg(errp, "Failed to send export name");
goto fail;
}
- } else {
- TRACE("Checking magic (cli_magic)");
- if (magic != NBD_CLIENT_MAGIC) {
- if (magic == NBD_OPTS_MAGIC) {
- error_setg(errp, "Server requires an export name");
- } else {
- error_setg(errp, "Bad magic received");
- }
+ if (read_sync(ioc, &s, sizeof(s)) != sizeof(s)) {
+ error_setg(errp, "Failed to read export length");
goto fail;
}
- }
+ *size = be64_to_cpu(s);
+ TRACE("Size is %" PRIu64, *size);
- if (read_sync(ioc, &s, sizeof(s)) != sizeof(s)) {
- error_setg(errp, "Failed to read export length");
- goto fail;
- }
- *size = be64_to_cpu(s);
- TRACE("Size is %" PRIu64, *size);
+ if (read_sync(ioc, &tmp, sizeof(tmp)) != sizeof(tmp)) {
+ error_setg(errp, "Failed to read export flags");
+ goto fail;
+ }
+ *flags |= be16_to_cpu(tmp);
+ } else if (magic == NBD_CLIENT_MAGIC) {
+ if (name) {
+ error_setg(errp, "Server does not support export names");
+ goto fail;
+ }
+
+ if (read_sync(ioc, &s, sizeof(s)) != sizeof(s)) {
+ error_setg(errp, "Failed to read export length");
+ goto fail;
+ }
+ *size = be64_to_cpu(s);
+ TRACE("Size is %" PRIu64, *size);
- if (!name) {
if (read_sync(ioc, flags, sizeof(*flags)) != sizeof(*flags)) {
error_setg(errp, "Failed to read export flags");
goto fail;
}
*flags = be32_to_cpup(flags);
} else {
- if (read_sync(ioc, &tmp, sizeof(tmp)) != sizeof(tmp)) {
- error_setg(errp, "Failed to read export flags");
- goto fail;
- }
- *flags |= be16_to_cpu(tmp);
+ error_setg(errp, "Bad magic received");
+ goto fail;
}
+
if (read_sync(ioc, &buf, 124) != 124) {
error_setg(errp, "Failed to read reserved block");
goto fail;
--
2.5.0
- [Qemu-devel] [PULL 07/28] vl: fix migration from prelaunch state, (continued)
- [Qemu-devel] [PULL 07/28] vl: fix migration from prelaunch state, Paolo Bonzini, 2016/02/16
- [Qemu-devel] [PULL 12/28] ipmi: sensor number should not exceed MAX_SENSORS, Paolo Bonzini, 2016/02/16
- [Qemu-devel] [PULL 10/28] mptsas: fix memory leak, Paolo Bonzini, 2016/02/16
- [Qemu-devel] [PULL 11/28] mptsas: fix wrong formula, Paolo Bonzini, 2016/02/16
- [Qemu-devel] [PULL 09/28] mptsas: add missing va_end, Paolo Bonzini, 2016/02/16
- [Qemu-devel] [PULL 14/28] qemu-nbd: add support for --object command line arg, Paolo Bonzini, 2016/02/16
- [Qemu-devel] [PULL 16/28] nbd: convert qemu-nbd server to use I/O channels for connection setup, Paolo Bonzini, 2016/02/16
- [Qemu-devel] [PULL 13/28] qom: add helpers for UserCreatable object types, Paolo Bonzini, 2016/02/16
- [Qemu-devel] [PULL 15/28] nbd: convert block client to use I/O channels for connection setup, Paolo Bonzini, 2016/02/16
- [Qemu-devel] [PULL 17/28] nbd: convert blockdev NBD server to use I/O channels for connection setup, Paolo Bonzini, 2016/02/16
- [Qemu-devel] [PULL 19/28] nbd: invert client logic for negotiating protocol version,
Paolo Bonzini <=
- [Qemu-devel] [PULL 20/28] nbd: make server compliant with fixed newstyle spec, Paolo Bonzini, 2016/02/16
- [Qemu-devel] [PULL 21/28] nbd: make client request fixed new style if advertised, Paolo Bonzini, 2016/02/16
- [Qemu-devel] [PULL 23/28] nbd: always query export list in fixed new style protocol, Paolo Bonzini, 2016/02/16
- [Qemu-devel] [PULL 18/28] nbd: convert to using I/O channels for actual socket I/O, Paolo Bonzini, 2016/02/16
- [Qemu-devel] [PULL 24/28] nbd: use "" as a default export name if none provided, Paolo Bonzini, 2016/02/16
- [Qemu-devel] [PULL 22/28] nbd: allow setting of an export name for qemu-nbd server, Paolo Bonzini, 2016/02/16
- [Qemu-devel] [PULL 26/28] nbd: enable use of TLS with NBD block driver, Paolo Bonzini, 2016/02/16
- [Qemu-devel] [PULL 25/28] nbd: implement TLS support in the protocol negotiation, Paolo Bonzini, 2016/02/16
- [Qemu-devel] [PULL 27/28] nbd: enable use of TLS with qemu-nbd server, Paolo Bonzini, 2016/02/16
- [Qemu-devel] [PULL 28/28] nbd: enable use of TLS with nbd-server-start command, Paolo Bonzini, 2016/02/16