Blob Blame History Raw
From f4379f04ea27e25c00e98db2e60d0fdb647442e9 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Tue, 26 Oct 2021 19:46:32 +0100
Subject: [PATCH] vddk: Move minimum version to VDDK 6.5

Drop support for VDDK 5.5.5 (released in 2015) and 6.0 (released the
same year).  Move minimum supported version to 6.5 (released Nov
2016).  This is so we can use asynchronous operations.

Acked-by: Laszlo Ersek <lersek@redhat.com>
(cherry picked from commit 5ed23616762a72e039531a9a7cd81353cd4f436e)
---
 plugins/vddk/nbdkit-vddk-plugin.pod | 10 +++-------
 plugins/vddk/vddk-stubs.h           |  3 +--
 plugins/vddk/vddk.c                 | 24 ++++++++++++++++--------
 tests/dummy-vddk.c                  |  6 ++++++
 4 files changed, 26 insertions(+), 17 deletions(-)

diff --git a/plugins/vddk/nbdkit-vddk-plugin.pod b/plugins/vddk/nbdkit-vddk-plugin.pod
index 0702aa75..1c16d096 100644
--- a/plugins/vddk/nbdkit-vddk-plugin.pod
+++ b/plugins/vddk/nbdkit-vddk-plugin.pod
@@ -424,7 +424,7 @@ by this build.
 
 =item C<vddk_library_version=...>
 
-The VDDK major library version: 5, 6, 7, ...
+The VDDK major library version: 6, 7, ...
 If this is omitted it means the library could not be loaded.
 
 =item C<vddk_dll=...>
@@ -548,16 +548,12 @@ server, which can also be very slow.
 
 =head1 SUPPORTED VERSIONS OF VDDK
 
-This plugin requires VDDK E<ge> 5.5.5, which in turn means that it
-is only supported on x64-64 platforms.
+This plugin requires VDDK E<ge> 6.5 (released Nov 2016).  It is only
+supported on the x64-64 archtecture.
 
 It has been tested with all versions up to 7.0.3 (but should work with
 future versions).
 
-VDDK E<ge> 6.0 should be used if possible.  This is the first version
-which added Flush support which is crucial for data integrity when
-writing.
-
 VDDK 6.7 was the first version that supported the
 C<VixDiskLib_QueryAllocatedBlocks> API, required to provide extent
 information over NBD.
diff --git a/plugins/vddk/vddk-stubs.h b/plugins/vddk/vddk-stubs.h
index 5e70238d..a94df9cd 100644
--- a/plugins/vddk/vddk-stubs.h
+++ b/plugins/vddk/vddk-stubs.h
@@ -40,8 +40,7 @@
  */
 
 /* Required stubs, present in all versions of VDDK that we support.  I
- * have checked that all these exist in at least VDDK 5.5.5 (2015)
- * which is the earliest version of VDDK that we support.
+ * have checked that all these exist in at least VDDK 5.5.5 (2015).
  */
 
 STUB (VixDiskLib_InitEx,
diff --git a/plugins/vddk/vddk.c b/plugins/vddk/vddk.c
index 096b04bf..babffc28 100644
--- a/plugins/vddk/vddk.c
+++ b/plugins/vddk/vddk.c
@@ -75,13 +75,13 @@ NBDKIT_DLL_PUBLIC int vddk_debug_stats;
 #undef OPTIONAL_STUB
 
 /* Parameters passed to InitEx. */
-#define VDDK_MAJOR 5
+#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: 5, 6, 7, ... */
+static int library_version;                /* VDDK major: 6, 7, ... */
 
 static enum { NONE = 0, ZLIB, FASTLZ, SKIPZ } compression; /* compression */
 static char *config;                       /* config */
@@ -413,16 +413,14 @@ load_library (bool load_error_is_fatal)
     /* Prefer the newest library in case multiple exist.  Check two
      * possible directories: the usual VDDK installation puts .so
      * files in an arch-specific subdirectory of $libdir (our minimum
-     * supported version is VDDK 5.5.5, which only supports x64-64);
-     * but our testsuite is easier to write if we point libdir
-     * directly to a stub .so.
+     * supported version is VDDK 6.5, which only supports x64-64); but
+     * our testsuite is easier to write if we point libdir directly to
+     * a stub .so.
      */
     { "lib64/libvixDiskLib.so.7", 7 },
     { "libvixDiskLib.so.7",       7 },
     { "lib64/libvixDiskLib.so.6", 6 },
     { "libvixDiskLib.so.6",       6 },
-    { "lib64/libvixDiskLib.so.5", 5 },
-    { "libvixDiskLib.so.5",       5 },
     { NULL }
   };
   size_t i;
@@ -474,7 +472,7 @@ load_library (bool load_error_is_fatal)
     exit (EXIT_FAILURE);
   }
 
-  assert (library_version >= 5);
+  assert (library_version >= 6);
 
   /* Load symbols. */
 #define STUB(fn,ret,args)                                         \
@@ -490,6 +488,16 @@ load_library (bool load_error_is_fatal)
 #include "vddk-stubs.h"
 #undef STUB
 #undef OPTIONAL_STUB
+
+  /* Additionally, VDDK version must be >= 6.5.  This was the first
+   * version which introduced VixDiskLib_Wait symbol so we can check
+   * for that.
+   */
+  if (VixDiskLib_Wait == NULL) {
+    nbdkit_error ("VDDK version must be >= 6.5. "
+                  "See nbdkit-vddk-plugin(1) man page section \"SUPPORTED VERSIONS OF VDDK\".");
+    exit (EXIT_FAILURE);
+  }
 }
 
 static int
diff --git a/tests/dummy-vddk.c b/tests/dummy-vddk.c
index 9b5ae0a2..cb88380c 100644
--- a/tests/dummy-vddk.c
+++ b/tests/dummy-vddk.c
@@ -198,3 +198,9 @@ VixDiskLib_Write (VixDiskLibHandle handle,
   memcpy (disk + offset, buf, nr_sectors * VIXDISKLIB_SECTOR_SIZE);
   return VIX_OK;
 }
+
+NBDKIT_DLL_PUBLIC VixError
+VixDiskLib_Wait (VixDiskLibHandle handle)
+{
+  return VIX_OK;
+}
-- 
2.31.1