Richard W.M. Jones
2021-Oct-27 12:21 UTC
[Libguestfs] [PATCH nbdkit 1/5] vddk: Move minimum version to VDDK 6.0
Drop support for VDDK 5.5.5 (released in 2015). Move minimum supported version to 6.0 (released the same year). This is so we can use asynchronous operations. --- plugins/vddk/nbdkit-vddk-plugin.pod | 10 +++------- plugins/vddk/vddk-stubs.h | 3 +-- plugins/vddk/vddk.c | 16 +++++++--------- 3 files changed, 11 insertions(+), 18 deletions(-) diff --git a/plugins/vddk/nbdkit-vddk-plugin.pod b/plugins/vddk/nbdkit-vddk-plugin.pod index 0702aa750..ac48cf23d 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.0, which in turn means that it is +only supported on x64-64 platforms. 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 5e70238db..a94df9cda 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 c506b5a14..78fc9f81e 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_MINOR 5 +#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: 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.0, 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) \ -- 2.32.0
Richard W.M. Jones
2021-Oct-27 18:52 UTC
[Libguestfs] [PATCH nbdkit 1/5] vddk: Move minimum version to VDDK 6.0
It turns out that VDDK 6.0 async support is present but broken, which makes it hard to support this version. If it was missing we could use an alternative codepath, but present-and-broken is difficult to deal with. (There is no way to detect VDDK versions at run time.) Specifically it's a problem because the completion callback API changed between 6.0 and 6.5: < typedef void (*VixDiskLibCompletionCB)(void *cbData, uint64 sector, < VixError result);> typedef void (*VixDiskLibCompletionCB)(void *cbData, VixError result);Since the sector number parameter is usually != 0 and it masks the result parameter in the later API we think that every async call is returning an error. I think we would need to require VDDK 6.5 for this change. That was released in November 2016 (5 years ago) and updating VDDK is no big deal. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com Fedora Windows cross-compiler. Compile Windows programs, test, and build Windows installers. Over 100 libraries supported. http://fedoraproject.org/wiki/MinGW