76daa3
From 7d557c2a53a5baa7d566e5d8ffa467dd1bc382db Mon Sep 17 00:00:00 2001
76daa3
From: Eric Blake <eblake@redhat.com>
76daa3
Date: Wed, 19 Jul 2017 18:02:01 +0200
76daa3
Subject: [PATCH 04/17] nbd: make nbd_drop public
76daa3
76daa3
RH-Author: Eric Blake <eblake@redhat.com>
76daa3
Message-id: <20170719180202.23329-4-eblake@redhat.com>
76daa3
Patchwork-id: 75814
76daa3
O-Subject: [RHEV-7.4.z qemu-kvm-rhev PATCH 3/4] nbd: make nbd_drop public
76daa3
Bugzilla: 1473638
76daa3
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
76daa3
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
76daa3
RH-Acked-by: Jeffrey Cody <jcody@redhat.com>
76daa3
76daa3
From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
76daa3
76daa3
Following commit will reuse it for nbd server too.
76daa3
76daa3
Reviewed-by: Eric Blake <eblake@redhat.com>
76daa3
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
76daa3
Message-Id: <20170602150150.258222-3-vsementsov@virtuozzo.com>
76daa3
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
76daa3
(cherry picked from commit 44298024d30ad36439707b89715a76333f58791b)
76daa3
76daa3
 Conflicts:
76daa3
	nbd/client.c, nbd/nbd_internal.h, nbd/common.c - missing errp
76daa3
	addition (e44ed99) and bulk rename (d1fdf25)
76daa3
76daa3
Signed-off-by: Eric Blake <eblake@redhat.com>
76daa3
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
76daa3
---
76daa3
 nbd/client.c       | 32 +++-----------------------------
76daa3
 nbd/common.c       | 26 ++++++++++++++++++++++++++
76daa3
 nbd/nbd-internal.h |  2 ++
76daa3
 3 files changed, 31 insertions(+), 29 deletions(-)
76daa3
76daa3
diff --git a/nbd/client.c b/nbd/client.c
76daa3
index 6b74a62..1652f28 100644
76daa3
--- a/nbd/client.c
76daa3
+++ b/nbd/client.c
76daa3
@@ -86,32 +86,6 @@ static QTAILQ_HEAD(, NBDExport) exports = QTAILQ_HEAD_INITIALIZER(exports);
76daa3
 
76daa3
 */
76daa3
 
76daa3
-/* Discard length bytes from channel.  Return -errno on failure and 0 on
76daa3
- * success*/
76daa3
-static int drop_sync(QIOChannel *ioc, size_t size)
76daa3
-{
76daa3
-    ssize_t ret = 0;
76daa3
-    char small[1024];
76daa3
-    char *buffer;
76daa3
-
76daa3
-    buffer = sizeof(small) >= size ? small : g_malloc(MIN(65536, size));
76daa3
-    while (size > 0) {
76daa3
-        ssize_t count = MIN(65536, size);
76daa3
-        ret = read_sync(ioc, buffer, MIN(65536, size));
76daa3
-
76daa3
-        if (ret < 0) {
76daa3
-            goto cleanup;
76daa3
-        }
76daa3
-        size -= count;
76daa3
-    }
76daa3
-
76daa3
- cleanup:
76daa3
-    if (buffer != small) {
76daa3
-        g_free(buffer);
76daa3
-    }
76daa3
-    return ret;
76daa3
-}
76daa3
-
76daa3
 /* Send an option request.
76daa3
  *
76daa3
  * The request is for option @opt, with @data containing @len bytes of
76daa3
@@ -333,7 +307,7 @@ static int nbd_receive_list(QIOChannel *ioc, const char *want, bool *match,
76daa3
         return -1;
76daa3
     }
76daa3
     if (namelen != strlen(want)) {
76daa3
-        if (drop_sync(ioc, len) < 0) {
76daa3
+        if (nbd_drop(ioc, len) < 0) {
76daa3
             error_setg(errp, "failed to skip export name with wrong length");
76daa3
             nbd_send_opt_abort(ioc);
76daa3
             return -1;
76daa3
@@ -349,7 +323,7 @@ static int nbd_receive_list(QIOChannel *ioc, const char *want, bool *match,
76daa3
     }
76daa3
     name[namelen] = '\0';
76daa3
     len -= namelen;
76daa3
-    if (drop_sync(ioc, len) < 0) {
76daa3
+    if (nbd_drop(ioc, len) < 0) {
76daa3
         error_setg(errp, "failed to read export description");
76daa3
         nbd_send_opt_abort(ioc);
76daa3
         return -1;
76daa3
@@ -616,7 +590,7 @@ int nbd_receive_negotiate(QIOChannel *ioc, const char *name, uint16_t *flags,
76daa3
     }
76daa3
 
76daa3
     TRACE("Size is %" PRIu64 ", export flags %" PRIx16, *size, *flags);
76daa3
-    if (zeroes && drop_sync(ioc, 124) < 0) {
76daa3
+    if (zeroes && nbd_drop(ioc, 124) < 0) {
76daa3
         error_setg(errp, "Failed to read reserved block");
76daa3
         goto fail;
76daa3
     }
76daa3
diff --git a/nbd/common.c b/nbd/common.c
76daa3
index 4db45b3..9a54010 100644
76daa3
--- a/nbd/common.c
76daa3
+++ b/nbd/common.c
76daa3
@@ -71,6 +71,32 @@ ssize_t nbd_wr_syncv(QIOChannel *ioc,
76daa3
     return done;
76daa3
 }
76daa3
 
76daa3
+/* Discard length bytes from channel.  Return -errno on failure and 0 on
76daa3
+ * success */
76daa3
+int nbd_drop(QIOChannel *ioc, size_t size)
76daa3
+{
76daa3
+    ssize_t ret = 0;
76daa3
+    char small[1024];
76daa3
+    char *buffer;
76daa3
+
76daa3
+    buffer = sizeof(small) >= size ? small : g_malloc(MIN(65536, size));
76daa3
+    while (size > 0) {
76daa3
+        ssize_t count = MIN(65536, size);
76daa3
+        ret = read_sync(ioc, buffer, MIN(65536, size));
76daa3
+
76daa3
+        if (ret < 0) {
76daa3
+            goto cleanup;
76daa3
+        }
76daa3
+        size -= count;
76daa3
+    }
76daa3
+
76daa3
+ cleanup:
76daa3
+    if (buffer != small) {
76daa3
+        g_free(buffer);
76daa3
+    }
76daa3
+    return ret;
76daa3
+}
76daa3
+
76daa3
 
76daa3
 void nbd_tls_handshake(QIOTask *task,
76daa3
                        void *opaque)
76daa3
diff --git a/nbd/nbd-internal.h b/nbd/nbd-internal.h
76daa3
index e6bbc7c..c02378c 100644
76daa3
--- a/nbd/nbd-internal.h
76daa3
+++ b/nbd/nbd-internal.h
76daa3
@@ -149,4 +149,6 @@ struct NBDTLSHandshakeData {
76daa3
 void nbd_tls_handshake(QIOTask *task,
76daa3
                        void *opaque);
76daa3
 
76daa3
+int nbd_drop(QIOChannel *ioc, size_t size);
76daa3
+
76daa3
 #endif
76daa3
-- 
76daa3
1.8.3.1
76daa3