qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Eric Blake <eblake@redhat.com>
To: qemu-devel@nongnu.org
Cc: nsoffer@redhat.com, rjones@redhat.com, jsnow@redhat.com,
	vsementsov@virtuozzo.com, qemu-block@nongnu.org
Subject: [Qemu-devel] [PATCH v4 16/21] nbd/client: Refactor nbd_opt_go() to support NBD_OPT_INFO
Date: Thu, 17 Jan 2019 13:36:53 -0600	[thread overview]
Message-ID: <20190117193658.16413-17-eblake@redhat.com> (raw)
In-Reply-To: <20190117193658.16413-1-eblake@redhat.com>

Rename the function to nbd_opt_info_or_go() with an added parameter
and slight changes to comments and trace messages, in order to
reuse the function for NBD_OPT_INFO.

Signed-off-by: Eric Blake <eblake@redhat.com>

---
v4: split out new patch [Vladimir]
---
 nbd/client.c     | 36 ++++++++++++++++++++++--------------
 nbd/trace-events |  8 ++++----
 2 files changed, 26 insertions(+), 18 deletions(-)

diff --git a/nbd/client.c b/nbd/client.c
index 6829c684fec..fa1657a1cb3 100644
--- a/nbd/client.c
+++ b/nbd/client.c
@@ -330,11 +330,16 @@ static int nbd_receive_list(QIOChannel *ioc, char **name, char **description,
 }


-/* Returns -1 if NBD_OPT_GO proves the export @info->name cannot be
- * used, 0 if NBD_OPT_GO is unsupported (fall back to NBD_OPT_LIST and
+/*
+ * nbd_opt_info_or_go:
+ * Send option for NBD_OPT_INFO or NBD_OPT_GO and parse the reply.
+ * Returns -1 if the option proves the export @info->name cannot be
+ * used, 0 if the option is unsupported (fall back to NBD_OPT_LIST and
  * NBD_OPT_EXPORT_NAME in that case), and > 0 if the export is good to
- * go (with the rest of @info populated). */
-static int nbd_opt_go(QIOChannel *ioc, NBDExportInfo *info, Error **errp)
+ * go (with the rest of @info populated).
+ */
+static int nbd_opt_info_or_go(QIOChannel *ioc, uint32_t opt,
+                              NBDExportInfo *info, Error **errp)
 {
     NBDOptionReply reply;
     uint32_t len = strlen(info->name);
@@ -347,7 +352,8 @@ static int nbd_opt_go(QIOChannel *ioc, NBDExportInfo *info, Error **errp)
      * flags still 0 is a witness of a broken server. */
     info->flags = 0;

-    trace_nbd_opt_go_start(info->name);
+    assert(opt == NBD_OPT_GO || opt == NBD_OPT_INFO);
+    trace_nbd_opt_info_go_start(nbd_opt_lookup(opt), info->name);
     buf = g_malloc(4 + len + 2 + 2 * info->request_sizes + 1);
     stl_be_p(buf, len);
     memcpy(buf + 4, info->name, len);
@@ -356,7 +362,7 @@ static int nbd_opt_go(QIOChannel *ioc, NBDExportInfo *info, Error **errp)
     if (info->request_sizes) {
         stw_be_p(buf + 4 + len + 2, NBD_INFO_BLOCK_SIZE);
     }
-    error = nbd_send_option_request(ioc, NBD_OPT_GO,
+    error = nbd_send_option_request(ioc, opt,
                                     4 + len + 2 + 2 * info->request_sizes,
                                     buf, errp);
     g_free(buf);
@@ -365,7 +371,7 @@ static int nbd_opt_go(QIOChannel *ioc, NBDExportInfo *info, Error **errp)
     }

     while (1) {
-        if (nbd_receive_option_reply(ioc, NBD_OPT_GO, &reply, errp) < 0) {
+        if (nbd_receive_option_reply(ioc, opt, &reply, errp) < 0) {
             return -1;
         }
         error = nbd_handle_reply_err(ioc, &reply, errp);
@@ -375,8 +381,10 @@ static int nbd_opt_go(QIOChannel *ioc, NBDExportInfo *info, Error **errp)
         len = reply.length;

         if (reply.type == NBD_REP_ACK) {
-            /* Server is done sending info and moved into transmission
-               phase, but make sure it sent flags */
+            /*
+             * Server is done sending info, and moved into transmission
+             * phase for NBD_OPT_GO, but make sure it sent flags
+             */
             if (len) {
                 error_setg(errp, "server sent invalid NBD_REP_ACK");
                 return -1;
@@ -385,7 +393,7 @@ static int nbd_opt_go(QIOChannel *ioc, NBDExportInfo *info, Error **errp)
                 error_setg(errp, "broken server omitted NBD_INFO_EXPORT");
                 return -1;
             }
-            trace_nbd_opt_go_success();
+            trace_nbd_opt_info_go_success(nbd_opt_lookup(opt));
             return 1;
         }
         if (reply.type != NBD_REP_INFO) {
@@ -479,12 +487,12 @@ static int nbd_opt_go(QIOChannel *ioc, NBDExportInfo *info, Error **errp)
                 nbd_send_opt_abort(ioc);
                 return -1;
             }
-            trace_nbd_opt_go_info_block_size(info->min_block, info->opt_block,
-                                             info->max_block);
+            trace_nbd_opt_info_block_size(info->min_block, info->opt_block,
+                                          info->max_block);
             break;

         default:
-            trace_nbd_opt_go_info_unknown(type, nbd_info_lookup(type));
+            trace_nbd_opt_info_unknown(type, nbd_info_lookup(type));
             if (nbd_drop(ioc, len, errp) < 0) {
                 error_prepend(errp, "Failed to read info payload: ");
                 nbd_send_opt_abort(ioc);
@@ -993,7 +1001,7 @@ int nbd_receive_negotiate(QIOChannel *ioc, QCryptoTLSCreds *tlscreds,
          * TLS).  If it is not available, fall back to
          * NBD_OPT_LIST for nicer error messages about a missing
          * export, then use NBD_OPT_EXPORT_NAME.  */
-        result = nbd_opt_go(ioc, info, errp);
+        result = nbd_opt_info_or_go(ioc, NBD_OPT_GO, info, errp);
         if (result < 0) {
             return -EINVAL;
         }
diff --git a/nbd/trace-events b/nbd/trace-events
index 663d11687ab..7f10ebd4e0b 100644
--- a/nbd/trace-events
+++ b/nbd/trace-events
@@ -4,10 +4,10 @@ nbd_receive_option_reply(uint32_t option, const char *optname, uint32_t type, co
 nbd_server_error_msg(uint32_t err, const char *type, const char *msg) "server reported error 0x%" PRIx32 " (%s) with additional message: %s"
 nbd_reply_err_unsup(uint32_t option, const char *name) "server doesn't understand request %" PRIu32 " (%s), attempting fallback"
 nbd_receive_list(const char *name, const char *desc) "export list includes '%s', description '%s'"
-nbd_opt_go_start(const char *name) "Attempting NBD_OPT_GO for export '%s'"
-nbd_opt_go_success(void) "Export is good to go"
-nbd_opt_go_info_unknown(int info, const char *name) "Ignoring unknown info %d (%s)"
-nbd_opt_go_info_block_size(uint32_t minimum, uint32_t preferred, uint32_t maximum) "Block sizes are 0x%" PRIx32 ", 0x%" PRIx32 ", 0x%" PRIx32
+nbd_opt_info_go_start(const char *opt, const char *name) "Attempting %s for export '%s'"
+nbd_opt_info_go_success(const char *opt) "Export is ready after %s request"
+nbd_opt_info_unknown(int info, const char *name) "Ignoring unknown info %d (%s)"
+nbd_opt_info_block_size(uint32_t minimum, uint32_t preferred, uint32_t maximum) "Block sizes are 0x%" PRIx32 ", 0x%" PRIx32 ", 0x%" PRIx32
 nbd_receive_query_exports_start(const char *wantname) "Querying export list for '%s'"
 nbd_receive_query_exports_success(const char *wantname) "Found desired export name '%s'"
 nbd_receive_starttls_new_client(void) "Setting up TLS"
-- 
2.20.1

  parent reply	other threads:[~2019-01-17 19:38 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-17 19:36 [Qemu-devel] [PATCH v4 00/21] nbd: add qemu-nbd --list Eric Blake
2019-01-17 19:36 ` [Qemu-devel] [PATCH v4 01/21] iotests: Make 233 output more reliable Eric Blake
2019-01-18  8:28   ` Vladimir Sementsov-Ogievskiy
2019-01-18 10:04     ` Daniel P. Berrangé
2019-01-18 10:02   ` Daniel P. Berrangé
2019-01-18 15:56     ` Eric Blake
2019-01-17 19:36 ` [Qemu-devel] [PATCH v4 02/21] maint: Allow for EXAMPLES in texi2pod Eric Blake
2019-01-18 12:41   ` Vladimir Sementsov-Ogievskiy
2019-01-17 19:36 ` [Qemu-devel] [PATCH v4 03/21] qemu-nbd: Enhance man page Eric Blake
2019-01-17 19:36 ` [Qemu-devel] [PATCH v4 04/21] qemu-nbd: Sanity check partition bounds Eric Blake
2019-01-17 19:36 ` [Qemu-devel] [PATCH v4 05/21] nbd/server: Hoist length check to qmp_nbd_server_add Eric Blake
2019-01-18  9:48   ` Vladimir Sementsov-Ogievskiy
2019-01-17 19:36 ` [Qemu-devel] [PATCH v4 06/21] nbd/server: Favor [u]int64_t over off_t Eric Blake
2019-01-17 19:36 ` [Qemu-devel] [PATCH v4 07/21] qemu-nbd: Avoid strtol open-coding Eric Blake
2019-01-17 19:36 ` [Qemu-devel] [PATCH v4 08/21] nbd/client: Refactor nbd_receive_list() Eric Blake
2019-01-17 19:36 ` [Qemu-devel] [PATCH v4 09/21] nbd/client: Move export name into NBDExportInfo Eric Blake
2019-01-17 19:36 ` [Qemu-devel] [PATCH v4 10/21] nbd/client: Change signature of nbd_negotiate_simple_meta_context() Eric Blake
2019-01-17 19:36 ` [Qemu-devel] [PATCH v4 11/21] nbd/client: Split out nbd_send_meta_query() Eric Blake
2019-01-18  9:59   ` Vladimir Sementsov-Ogievskiy
2019-01-17 19:36 ` [Qemu-devel] [PATCH v4 12/21] nbd/client: Split out nbd_receive_one_meta_context() Eric Blake
2019-01-17 19:36 ` [Qemu-devel] [PATCH v4 13/21] nbd/client: Refactor return of nbd_receive_negotiate() Eric Blake
2019-01-17 19:36 ` [Qemu-devel] [PATCH v4 14/21] nbd/client: Split handshake into two functions Eric Blake
2019-01-17 19:36 ` [Qemu-devel] [PATCH v4 15/21] nbd/client: Pull out oldstyle size determination Eric Blake
2019-01-18 10:04   ` Vladimir Sementsov-Ogievskiy
2019-01-17 19:36 ` Eric Blake [this message]
2019-01-18 11:54   ` [Qemu-devel] [PATCH v4 16/21] nbd/client: Refactor nbd_opt_go() to support NBD_OPT_INFO Vladimir Sementsov-Ogievskiy
2019-01-17 19:36 ` [Qemu-devel] [PATCH v4 17/21] nbd/client: Add nbd_receive_export_list() Eric Blake
2019-01-18 12:07   ` Vladimir Sementsov-Ogievskiy
2019-01-17 19:36 ` [Qemu-devel] [PATCH v4 18/21] nbd/client: Add meta contexts to nbd_receive_export_list() Eric Blake
2019-01-17 19:36 ` [Qemu-devel] [PATCH v4 19/21] qemu-nbd: Add --list option Eric Blake
2019-01-18 12:28   ` Vladimir Sementsov-Ogievskiy
2019-01-17 19:36 ` [Qemu-devel] [PATCH v4 20/21] nbd/client: Work around 3.0 bug for listing meta contexts Eric Blake
2019-01-17 19:36 ` [Qemu-devel] [PATCH v4 21/21] iotests: Enhance 223, 233 to cover 'qemu-nbd --list' Eric Blake
2019-01-18  8:15 ` [Qemu-devel] [PATCH v4 00/21] nbd: add qemu-nbd --list Vladimir Sementsov-Ogievskiy
2019-01-18 13:47   ` Vladimir Sementsov-Ogievskiy
2019-01-18 16:06     ` Eric Blake
2019-01-18 22:47     ` Eric Blake
2019-01-19  8:07       ` Richard W.M. Jones
2019-01-19 11:39       ` Richard W.M. Jones
2019-01-20 17:42         ` Richard W.M. Jones
2019-01-18 16:08 ` Eric Blake

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=20190117193658.16413-17-eblake@redhat.com \
    --to=eblake@redhat.com \
    --cc=jsnow@redhat.com \
    --cc=nsoffer@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=rjones@redhat.com \
    --cc=vsementsov@virtuozzo.com \
    /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).