[Libguestfs] [PATCH nbdkit 2/3] server: Rename ‘struct b_conn_handle’ to plain ‘struct handle’.

Richard W.M. Jones
Wed, 12 Feb 2020 13:40:06 -0000

Also add an inline accessor function (get_handle).

This also removes the unused function connection_get_handle.
---
 server/internal.h    | 24 ++++++++++++++++-----
 server/backend.c     | 50 ++++++++++++++++++++++----------------------
 server/connections.c | 11 +---------
 3 files changed, 45 insertions(+), 40 deletions(-)

diff --git a/server/internal.h b/server/internal.h
index c3622671..9d314bf8 100644
--- a/server/internal.h
+++ b/server/internal.h
@@ -170,16 +170,24 @@ typedef int (*connection_send_function) (const void *buf,
size_t len,
   __attribute__((__nonnull__ (1)));
 typedef void (*connection_close_function) (void);

+/* struct handle stores data per connection and backend.  Primarily
+ * this is the filter or plugin handle, but other state is also stored
+ * here.
+ *
+ * Use get_handle (conn, 0) to return the struct handle for the
+ * plugin, and get_handle (conn, b->i) to return the struct handle for
+ * the i'th backend (if b->i >= 1 then for a filter).
+ */
 enum {
   HANDLE_OPEN = 1,      /* Set if .open passed, so .close is needed */
   HANDLE_CONNECTED = 2, /* Set if .prepare passed, so .finalize is needed */
   HANDLE_FAILED = 4,    /* Set if .finalize failed */
 };

-struct b_conn_handle {
-  void *handle;
+struct handle {
+  void *handle;         /* Plugin or filter handle. */

-  unsigned char state; /* Bitmask of HANDLE_* values */
+  unsigned char state;  /* Bitmask of HANDLE_* values */

   uint64_t exportsize;
   int can_write;
@@ -195,7 +203,7 @@ struct b_conn_handle {
 };

 static inline void
-reset_b_conn_handle (struct b_conn_handle *h)
+reset_handle (struct handle *h)
 {
   h->handle = NULL;
   h->state = 0;
@@ -222,7 +230,7 @@ struct connection {
   void *crypto_session;
   int nworkers;

-  struct b_conn_handle *handles;
+  struct handle *handles;       /* One per plugin and filter. */
   size_t nr_handles;

   char exportname[NBD_MAX_STRING + 1];
@@ -239,6 +247,12 @@ struct connection {
   connection_close_function close;
 };

+static inline struct handle *
+get_handle (struct connection *conn, int i)
+{
+  return &conn->handles[i];
+}
+
 extern void handle_single_connection (int sockin, int sockout);
 extern int connection_get_status (void);
 extern int connection_set_status (int value);
diff --git a/server/backend.c b/server/backend.c
index 616c24d8..9669ada1 100644
--- a/server/backend.c
+++ b/server/backend.c
@@ -154,7 +154,7 @@ int
 backend_open (struct backend *b, int readonly)
 {
   GET_CONN;
-  struct b_conn_handle *h = &conn->handles[b->i];
+  struct handle *h = get_handle (conn, b->i);

   controlpath_debug ("%s: open readonly=%d", b->name, readonly);

@@ -178,7 +178,7 @@ backend_open (struct backend *b, int readonly)

   h->state |= HANDLE_OPEN;
   if (b->i) /* A filter must not succeed unless its backend did also */
-    assert (conn->handles[b->i - 1].handle);
+    assert (get_handle (conn, b->i-1)->handle != NULL);
   return 0;
 }

@@ -186,7 +186,7 @@ int
 backend_prepare (struct backend *b)
 {
   GET_CONN;
-  struct b_conn_handle *h = &conn->handles[b->i];
+  struct handle *h = get_handle (conn, b->i);

   assert (h->handle);
   assert ((h->state & (HANDLE_OPEN | HANDLE_CONNECTED)) == HANDLE_OPEN);
@@ -209,7 +209,7 @@ int
 backend_finalize (struct backend *b)
 {
   GET_CONN;
-  struct b_conn_handle *h = &conn->handles[b->i];
+  struct handle *h = get_handle (conn, b->i);

   /* Call these in reverse order to .prepare above, starting from the
    * filter furthest away from the plugin, and matching .close order.
@@ -238,7 +238,7 @@ void
 backend_close (struct backend *b)
 {
   GET_CONN;
-  struct b_conn_handle *h = &conn->handles[b->i];
+  struct handle *h = get_handle (conn, b->i);

   /* outer-to-inner order, opposite .open */
   controlpath_debug ("%s: close", b->name);
@@ -249,7 +249,7 @@ backend_close (struct backend *b)
   }
   else
     assert (! (h->state & HANDLE_OPEN));
-  reset_b_conn_handle (h);
+  reset_handle (h);
   if (b->i)
     backend_close (b->next);
 }
@@ -258,7 +258,7 @@ bool
 backend_valid_range (struct backend *b, uint64_t offset, uint32_t count)
 {
   GET_CONN;
-  struct b_conn_handle *h = &conn->handles[b->i];
+  struct handle *h = get_handle (conn, b->i);

   assert (h->exportsize <= INT64_MAX); /* Guaranteed by negotiation phase
*/
   return count > 0 && offset <= h->exportsize &&
@@ -291,7 +291,7 @@ int64_t
 backend_get_size (struct backend *b)
 {
   GET_CONN;
-  struct b_conn_handle *h = &conn->handles[b->i];
+  struct handle *h = get_handle (conn, b->i);

   controlpath_debug ("%s: get_size", b->name);

@@ -305,7 +305,7 @@ int
 backend_can_write (struct backend *b)
 {
   GET_CONN;
-  struct b_conn_handle *h = &conn->handles[b->i];
+  struct handle *h = get_handle (conn, b->i);

   controlpath_debug ("%s: can_write", b->name);

@@ -319,7 +319,7 @@ int
 backend_can_flush (struct backend *b)
 {
   GET_CONN;
-  struct b_conn_handle *h = &conn->handles[b->i];
+  struct handle *h = get_handle (conn, b->i);

   controlpath_debug ("%s: can_flush", b->name);

@@ -333,7 +333,7 @@ int
 backend_is_rotational (struct backend *b)
 {
   GET_CONN;
-  struct b_conn_handle *h = &conn->handles[b->i];
+  struct handle *h = get_handle (conn, b->i);

   controlpath_debug ("%s: is_rotational", b->name);

@@ -347,7 +347,7 @@ int
 backend_can_trim (struct backend *b)
 {
   GET_CONN;
-  struct b_conn_handle *h = &conn->handles[b->i];
+  struct handle *h = get_handle (conn, b->i);
   int r;

   controlpath_debug ("%s: can_trim", b->name);
@@ -368,7 +368,7 @@ int
 backend_can_zero (struct backend *b)
 {
   GET_CONN;
-  struct b_conn_handle *h = &conn->handles[b->i];
+  struct handle *h = get_handle (conn, b->i);
   int r;

   controlpath_debug ("%s: can_zero", b->name);
@@ -389,7 +389,7 @@ int
 backend_can_fast_zero (struct backend *b)
 {
   GET_CONN;
-  struct b_conn_handle *h = &conn->handles[b->i];
+  struct handle *h = get_handle (conn, b->i);
   int r;

   controlpath_debug ("%s: can_fast_zero", b->name);
@@ -410,7 +410,7 @@ int
 backend_can_extents (struct backend *b)
 {
   GET_CONN;
-  struct b_conn_handle *h = &conn->handles[b->i];
+  struct handle *h = get_handle (conn, b->i);

   controlpath_debug ("%s: can_extents", b->name);

@@ -424,7 +424,7 @@ int
 backend_can_fua (struct backend *b)
 {
   GET_CONN;
-  struct b_conn_handle *h = &conn->handles[b->i];
+  struct handle *h = get_handle (conn, b->i);
   int r;

   controlpath_debug ("%s: can_fua", b->name);
@@ -445,7 +445,7 @@ int
 backend_can_multi_conn (struct backend *b)
 {
   GET_CONN;
-  struct b_conn_handle *h = &conn->handles[b->i];
+  struct handle *h = get_handle (conn, b->i);

   assert (h->handle && (h->state & HANDLE_CONNECTED));
   controlpath_debug ("%s: can_multi_conn", b->name);
@@ -459,7 +459,7 @@ int
 backend_can_cache (struct backend *b)
 {
   GET_CONN;
-  struct b_conn_handle *h = &conn->handles[b->i];
+  struct handle *h = get_handle (conn, b->i);

   controlpath_debug ("%s: can_cache", b->name);

@@ -475,7 +475,7 @@ backend_pread (struct backend *b,
                uint32_t flags, int *err)
 {
   GET_CONN;
-  struct b_conn_handle *h = &conn->handles[b->i];
+  struct handle *h = get_handle (conn, b->i);
   int r;

   assert (h->handle && (h->state & HANDLE_CONNECTED));
@@ -496,7 +496,7 @@ backend_pwrite (struct backend *b,
                 uint32_t flags, int *err)
 {
   GET_CONN;
-  struct b_conn_handle *h = &conn->handles[b->i];
+  struct handle *h = get_handle (conn, b->i);
   bool fua = !!(flags & NBDKIT_FLAG_FUA);
   int r;

@@ -520,7 +520,7 @@ backend_flush (struct backend *b,
                uint32_t flags, int *err)
 {
   GET_CONN;
-  struct b_conn_handle *h = &conn->handles[b->i];
+  struct handle *h = get_handle (conn, b->i);
   int r;

   assert (h->handle && (h->state & HANDLE_CONNECTED));
@@ -540,7 +540,7 @@ backend_trim (struct backend *b,
               int *err)
 {
   GET_CONN;
-  struct b_conn_handle *h = &conn->handles[b->i];
+  struct handle *h = get_handle (conn, b->i);
   bool fua = !!(flags & NBDKIT_FLAG_FUA);
   int r;

@@ -566,7 +566,7 @@ backend_zero (struct backend *b,
               int *err)
 {
   GET_CONN;
-  struct b_conn_handle *h = &conn->handles[b->i];
+  struct handle *h = get_handle (conn, b->i);
   bool fua = !!(flags & NBDKIT_FLAG_FUA);
   bool fast = !!(flags & NBDKIT_FLAG_FAST_ZERO);
   int r;
@@ -601,7 +601,7 @@ backend_extents (struct backend *b,
                  struct nbdkit_extents *extents, int *err)
 {
   GET_CONN;
-  struct b_conn_handle *h = &conn->handles[b->i];
+  struct handle *h = get_handle (conn, b->i);
   int r;

   assert (h->handle && (h->state & HANDLE_CONNECTED));
@@ -632,7 +632,7 @@ backend_cache (struct backend *b,
                uint32_t flags, int *err)
 {
   GET_CONN;
-  struct b_conn_handle *h = &conn->handles[b->i];
+  struct handle *h = get_handle (conn, b->i);
   int r;

   assert (h->handle && (h->state & HANDLE_CONNECTED));
diff --git a/server/connections.c b/server/connections.c
index 7e9584b3..d4cdf994 100644
--- a/server/connections.c
+++ b/server/connections.c
@@ -58,15 +58,6 @@ static int raw_send_socket (const void *buf, size_t len, int
flags);
 static int raw_send_other (const void *buf, size_t len, int flags);
 static void raw_close (void);

-void *
-connection_get_handle (size_t i)
-{
-  GET_CONN;
-
-  assert (i < conn->nr_handles);
-  return conn->handles[i].handle;
-}
-
 int
 connection_get_status (void)
 {
@@ -258,7 +249,7 @@ new_connection (int sockin, int sockout, int nworkers)
   }
   conn->nr_handles = top->i + 1;
   for_each_backend (b)
-    reset_b_conn_handle (&conn->handles[b->i]);
+    reset_handle (get_handle (conn, b->i));

   conn->status = 1;
   conn->nworkers = nworkers;
--
2.25.0