2022-02-01 17:54:29 +00:00
|
|
|
From 6d720b2ca5a63fa6782b2b4a2183d336269cc98e Mon Sep 17 00:00:00 2001
|
2021-12-07 17:38:55 +00:00
|
|
|
From: "Richard W.M. Jones" <rjones@redhat.com>
|
|
|
|
Date: Wed, 27 Oct 2021 12:20:31 +0100
|
|
|
|
Subject: [PATCH] vddk: Start to split VDDK over several files
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
Acked-by: Laszlo Ersek <lersek@redhat.com>
|
|
|
|
(cherry picked from commit 117634dccf4e29394e8718a8d62e93a9edf0a39c)
|
|
|
|
---
|
|
|
|
plugins/vddk/vddk.c | 91 +++++++++++++--------------------------------
|
|
|
|
plugins/vddk/vddk.h | 89 +++++++++++++++++++++++++++++++++++++++++++-
|
|
|
|
2 files changed, 112 insertions(+), 68 deletions(-)
|
|
|
|
|
|
|
|
diff --git a/plugins/vddk/vddk.c b/plugins/vddk/vddk.c
|
|
|
|
index babffc28..041bff1a 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 5
|
|
|
|
|
|
|
|
-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)
|
|
|
|
diff --git a/plugins/vddk/vddk.h b/plugins/vddk/vddk.h
|
|
|
|
index 8c63b4ee..29775eb4 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);
|
|
|
|
|
|
|
|
--
|
|
|
|
2.31.1
|
|
|
|
|