[Libguestfs] [PATCH nbdkit 3/5] vddk: Start to split VDDK over several files

Richard W.M. Jones rjones at redhat.com
Wed Oct 27 12:21:11 UTC 2021


This change doesn't do anything except move some definitions into the
header file vddk.h, but it allows future commits to split up the very
large vddk.c file.
---
 plugins/vddk/vddk.h | 89 +++++++++++++++++++++++++++++++++++++++++++-
 plugins/vddk/vddk.c | 91 +++++++++++++--------------------------------
 2 files changed, 112 insertions(+), 68 deletions(-)

diff --git a/plugins/vddk/vddk.h b/plugins/vddk/vddk.h
index 8c63b4eea..29775eb48 100644
--- a/plugins/vddk/vddk.h
+++ b/plugins/vddk/vddk.h
@@ -1,5 +1,5 @@
 /* nbdkit
- * Copyright (C) 2013-2020 Red Hat Inc.
+ * Copyright (C) 2013-2021 Red Hat Inc.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -33,11 +33,96 @@
 #ifndef NBDKIT_VDDK_H
 #define NBDKIT_VDDK_H
 
+#include <stdbool.h>
+#include <stdint.h>
+#include <sys/time.h>
+
+#include <pthread.h>
+
+#include "isaligned.h"
+#include "tvdiff.h"
+#include "vector.h"
+
+#include "vddk-structs.h"
+
+enum compression_type { NONE = 0, ZLIB, FASTLZ, SKIPZ };
+
+extern void *dl;
+extern bool init_called;
+extern __thread int error_suppression;
+extern int library_version;
+extern bool is_remote;
+
+extern enum compression_type compression;
+extern char *config;
+extern const char *cookie;
+extern const char *filename;
 extern char *libdir;
+extern uint16_t nfc_host_port;
 extern char *password;
+extern uint16_t port;
+extern const char *server_name;
+extern bool single_link;
+extern const char *snapshot_moref;
+extern const char *thumb_print;
+extern const char *transport_modes;
+extern bool unbuffered;
+extern const char *username;
+extern const char *vmx_spec;
+
+extern int vddk_debug_diskinfo;
+extern int vddk_debug_extents;
+extern int vddk_debug_datapath;
+extern int vddk_debug_stats;
+
+#define STUB(fn,ret,args) extern ret (*fn) args
+#define OPTIONAL_STUB(fn,ret,args) extern ret (*fn) args
+#include "vddk-stubs.h"
+#undef STUB
+#undef OPTIONAL_STUB
+
+/* Macros to bracket each VDDK API call, for printing debugging
+ * information and collecting statistics.
+ */
+#define VDDK_CALL_START(fn, fs, ...)                                    \
+  do {                                                                  \
+  struct timeval start_t, end_t;                                        \
+  /* GCC can optimize this away at compile time: */                     \
+  const bool datapath =                                                 \
+    strcmp (#fn, "VixDiskLib_Read") == 0 ||                             \
+    strcmp (#fn, "VixDiskLib_Write") == 0;                              \
+  if (vddk_debug_stats)                                                 \
+    gettimeofday (&start_t, NULL);                                      \
+  if (!datapath || vddk_debug_datapath)                                 \
+    nbdkit_debug ("VDDK call: %s (" fs ")", #fn, ##__VA_ARGS__);        \
+  do
+#define VDDK_CALL_END(fn, bytes_)                       \
+  while (0);                                            \
+  if (vddk_debug_stats) {                               \
+    gettimeofday (&end_t, NULL);                        \
+    ACQUIRE_LOCK_FOR_CURRENT_SCOPE (&stats_lock);       \
+    stats_##fn.usecs += tvdiff_usec (&start_t, &end_t); \
+    stats_##fn.calls++;                                 \
+    stats_##fn.bytes += bytes_;                         \
+  }                                                     \
+  } while (0)
+
+/* Print VDDK errors. */
+#define VDDK_ERROR(err, fs, ...)                                \
+  do {                                                          \
+    char *vddk_err_msg;                                         \
+    VDDK_CALL_START (VixDiskLib_GetErrorText, "%lu", err)       \
+      vddk_err_msg = VixDiskLib_GetErrorText ((err), NULL);     \
+    VDDK_CALL_END (VixDiskLib_GetErrorText, 0);                 \
+    nbdkit_error (fs ": %s", ##__VA_ARGS__, vddk_err_msg);      \
+    VDDK_CALL_START (VixDiskLib_FreeErrorText, "")              \
+      VixDiskLib_FreeErrorText (vddk_err_msg);                  \
+    VDDK_CALL_END (VixDiskLib_FreeErrorText, 0);                \
+  } while (0)
+
+/* reexec.c */
 extern bool noreexec;
 extern char *reexeced;
-
 extern void reexec_if_needed (const char *prepend);
 extern int restore_ld_library_path (void);
 
diff --git a/plugins/vddk/vddk.c b/plugins/vddk/vddk.c
index 78fc9f81e..94aa1a23c 100644
--- a/plugins/vddk/vddk.c
+++ b/plugins/vddk/vddk.c
@@ -50,14 +50,12 @@
 #include <nbdkit-plugin.h>
 
 #include "cleanup.h"
-#include "isaligned.h"
 #include "minmax.h"
 #include "rounding.h"
 #include "tvdiff.h"
 #include "vector.h"
 
 #include "vddk.h"
-#include "vddk-structs.h"
 
 /* Debug flags. */
 NBDKIT_DLL_PUBLIC int vddk_debug_diskinfo;
@@ -65,11 +63,11 @@ NBDKIT_DLL_PUBLIC int vddk_debug_extents;
 NBDKIT_DLL_PUBLIC int vddk_debug_datapath = 1;
 NBDKIT_DLL_PUBLIC int vddk_debug_stats;
 
-/* For each VDDK API define a static global variable.  These globals
- * are initialized when the plugin is loaded (by vddk_get_ready).
+/* For each VDDK API define a global variable.  These globals are
+ * initialized when the plugin is loaded (by vddk_get_ready).
  */
-#define STUB(fn,ret,args) static ret (*fn) args
-#define OPTIONAL_STUB(fn,ret,args) static ret (*fn) args
+#define STUB(fn,ret,args) ret (*fn) args
+#define OPTIONAL_STUB(fn,ret,args) ret (*fn) args
 #include "vddk-stubs.h"
 #undef STUB
 #undef OPTIONAL_STUB
@@ -78,28 +76,28 @@ NBDKIT_DLL_PUBLIC int vddk_debug_stats;
 #define VDDK_MAJOR 6
 #define VDDK_MINOR 0
 
-static void *dl;                           /* dlopen handle */
-static bool init_called;                   /* was InitEx called */
-static __thread int error_suppression;     /* threadlocal error suppression */
-static int library_version;                /* VDDK major: 6, 7, ... */
+void *dl;                              /* dlopen handle */
+bool init_called;                      /* was InitEx called */
+__thread int error_suppression;        /* threadlocal error suppression */
+int library_version;                   /* VDDK major: 6, 7, ... */
+bool is_remote;                        /* true if remote connection */
 
-static enum { NONE = 0, ZLIB, FASTLZ, SKIPZ } compression; /* compression */
-static char *config;                       /* config */
-static const char *cookie;                 /* cookie */
-static const char *filename;               /* file */
-char *libdir;                              /* libdir */
-static uint16_t nfc_host_port;             /* nfchostport */
-char *password;                            /* password */
-static uint16_t port;                      /* port */
-static const char *server_name;            /* server */
-static bool single_link;                   /* single-link */
-static const char *snapshot_moref;         /* snapshot */
-static const char *thumb_print;            /* thumbprint */
-static const char *transport_modes;        /* transports */
-static bool unbuffered;                    /* unbuffered */
-static const char *username;               /* user */
-static const char *vmx_spec;               /* vm */
-static bool is_remote;
+enum compression_type compression;     /* compression */
+char *config;                          /* config */
+const char *cookie;                    /* cookie */
+const char *filename;                  /* file */
+char *libdir;                          /* libdir */
+uint16_t nfc_host_port;                /* nfchostport */
+char *password;                        /* password */
+uint16_t port;                         /* port */
+const char *server_name;               /* server */
+bool single_link;                      /* single-link */
+const char *snapshot_moref;            /* snapshot */
+const char *thumb_print;               /* thumbprint */
+const char *transport_modes;           /* transports */
+bool unbuffered;                       /* unbuffered */
+const char *username;                  /* user */
+const char *vmx_spec;                  /* vm */
 
 /* For each VDDK API define a variable to store the time taken (used
  * to implement -D vddk.stats=1).
@@ -120,45 +118,6 @@ static void display_stats (void);
 #undef STUB
 #undef OPTIONAL_STUB
 
-/* Macros to bracket each VDDK API call, for printing debugging
- * information and collecting statistics.
- */
-#define VDDK_CALL_START(fn, fs, ...)                                    \
-  do {                                                                  \
-  struct timeval start_t, end_t;                                        \
-  /* GCC can optimize this away at compile time: */                     \
-  const bool datapath =                                                 \
-    strcmp (#fn, "VixDiskLib_Read") == 0 ||                             \
-    strcmp (#fn, "VixDiskLib_Write") == 0;                              \
-  if (vddk_debug_stats)                                                 \
-    gettimeofday (&start_t, NULL);                                      \
-  if (!datapath || vddk_debug_datapath)                                 \
-    nbdkit_debug ("VDDK call: %s (" fs ")", #fn, ##__VA_ARGS__);        \
-  do
-#define VDDK_CALL_END(fn, bytes_)                       \
-  while (0);                                            \
-  if (vddk_debug_stats) {                               \
-    gettimeofday (&end_t, NULL);                        \
-    ACQUIRE_LOCK_FOR_CURRENT_SCOPE (&stats_lock);       \
-    stats_##fn.usecs += tvdiff_usec (&start_t, &end_t); \
-    stats_##fn.calls++;                                 \
-    stats_##fn.bytes += bytes_;                         \
-  }                                                     \
-  } while (0)
-
-/* Print VDDK errors. */
-#define VDDK_ERROR(err, fs, ...)                                \
-  do {                                                          \
-    char *vddk_err_msg;                                         \
-    VDDK_CALL_START (VixDiskLib_GetErrorText, "%lu", err)       \
-      vddk_err_msg = VixDiskLib_GetErrorText ((err), NULL);     \
-    VDDK_CALL_END (VixDiskLib_GetErrorText, 0);                 \
-    nbdkit_error (fs ": %s", ##__VA_ARGS__, vddk_err_msg);      \
-    VDDK_CALL_START (VixDiskLib_FreeErrorText, "")              \
-      VixDiskLib_FreeErrorText (vddk_err_msg);                  \
-    VDDK_CALL_END (VixDiskLib_FreeErrorText, 0);                \
-  } while (0)
-
 /* Unload the plugin. */
 static void
 vddk_unload (void)
-- 
2.32.0




More information about the Libguestfs mailing list