From 517e4a2f490ff56c8b3fbf9a56c8d4a6e167c2b6 Mon Sep 17 00:00:00 2001 From: Miroslav Rezanina Date: Wed, 29 May 2019 16:09:59 +0100 Subject: [PATCH 1/9] Disable VXHS support RH-Author: Miroslav Rezanina Message-id: <1559146199-30110-1-git-send-email-mrezanin@redhat.com> Patchwork-id: 88273 O-Subject: [RHEL-AV-8.1.0 qemu-kvm PATCH] Disable VXHS support Bugzilla: 1714937 RH-Acked-by: Markus Armbruster RH-Acked-by: Stefan Hajnoczi RH-Acked-by: Danilo de Paula From: Miroslav Rezanina As we ended our partnership with Veritas, we do not support VXHS anymore. Reverting our downstream changes included in "Initial redhat commit". Signed-off-by: Miroslav Rezanina Signed-off-by: Danilo C. L. de Paula --- block/Makefile.objs | 2 +- block/vxhs.c | 119 ++++-------------------------------------- configure | 33 ++++++++++-- redhat/qemu-kvm.spec.template | 11 +--- 4 files changed, 41 insertions(+), 124 deletions(-) diff --git a/block/Makefile.objs b/block/Makefile.objs index f4cf03b..7a81892 100644 --- a/block/Makefile.objs +++ b/block/Makefile.objs @@ -30,7 +30,7 @@ block-obj-$(CONFIG_LIBNFS) += nfs.o block-obj-$(CONFIG_CURL) += curl.o block-obj-$(CONFIG_RBD) += rbd.o block-obj-$(CONFIG_GLUSTERFS) += gluster.o -#block-obj-$(CONFIG_VXHS) += vxhs.o +block-obj-$(CONFIG_VXHS) += vxhs.o block-obj-$(CONFIG_LIBSSH2) += ssh.o block-obj-y += accounting.o dirty-bitmap.o block-obj-y += write-threshold.o diff --git a/block/vxhs.c b/block/vxhs.c index 3dbb954..2e18229 100644 --- a/block/vxhs.c +++ b/block/vxhs.c @@ -9,8 +9,7 @@ */ #include "qemu/osdep.h" -#include "block/vxhs_shim.h" -#include +#include #include #include "block/block_int.h" #include "block/qdict.h" @@ -60,97 +59,6 @@ typedef struct BDRVVXHSState { char *tlscredsid; /* tlscredsid */ } BDRVVXHSState; -#define LIBVXHS_FULL_PATHNAME "/usr/lib64/qemu/libvxhs.so.1" -static bool libvxhs_loaded; -static GModule *libvxhs_handle; - -static LibVXHSFuncs libvxhs; - -typedef struct LibVXHSSymbols { - const char *name; - gpointer *addr; -} LibVXHSSymbols; - -static LibVXHSSymbols libvxhs_symbols[] = { - {"iio_init", (gpointer *) &libvxhs.iio_init}, - {"iio_fini", (gpointer *) &libvxhs.iio_fini}, - {"iio_min_version", (gpointer *) &libvxhs.iio_min_version}, - {"iio_max_version", (gpointer *) &libvxhs.iio_max_version}, - {"iio_open", (gpointer *) &libvxhs.iio_open}, - {"iio_close", (gpointer *) &libvxhs.iio_close}, - {"iio_writev", (gpointer *) &libvxhs.iio_writev}, - {"iio_readv", (gpointer *) &libvxhs.iio_readv}, - {"iio_ioctl", (gpointer *) &libvxhs.iio_ioctl}, - {NULL} -}; - -static void bdrv_vxhs_set_funcs(GModule *handle, Error **errp) -{ - int i = 0; - while (libvxhs_symbols[i].name) { - const char *name = libvxhs_symbols[i].name; - if (!g_module_symbol(handle, name, libvxhs_symbols[i].addr)) { - error_setg(errp, "%s could not be loaded from libvxhs: %s", - name, g_module_error()); - return; - } - ++i; - } -} - -static void bdrv_vxhs_load_libs(Error **errp) -{ - Error *local_err = NULL; - int32_t ver; - - if (libvxhs_loaded) { - return; - } - - if (!g_module_supported()) { - error_setg(errp, "modules are not supported on this platform: %s", - g_module_error()); - return; - } - - libvxhs_handle = g_module_open(LIBVXHS_FULL_PATHNAME, - G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL); - if (!libvxhs_handle) { - error_setg(errp, "The VXHS library from Veritas might not be installed " - "correctly (%s)", g_module_error()); - return; - } - - g_module_make_resident(libvxhs_handle); - - bdrv_vxhs_set_funcs(libvxhs_handle, &local_err); - if (local_err) { - error_propagate(errp, local_err); - return; - } - - /* Now check to see if the libvxhs we are using here is supported - * by the loaded version */ - - ver = (*libvxhs.iio_min_version)(); - if (ver > QNIO_VERSION) { - error_setg(errp, "Trying to use libvxhs version %"PRId32" API, but " - "only %"PRId32" or newer is supported by %s", - QNIO_VERSION, ver, LIBVXHS_FULL_PATHNAME); - return; - } - - ver = (*libvxhs.iio_max_version)(); - if (ver < QNIO_VERSION) { - error_setg(errp, "Trying to use libvxhs version %"PRId32" API, but " - "only %"PRId32" or earlier is supported by %s", - QNIO_VERSION, ver, LIBVXHS_FULL_PATHNAME); - return; - } - - libvxhs_loaded = true; -} - static void vxhs_complete_aio_bh(void *opaque) { VXHSAIOCB *acb = opaque; @@ -318,7 +226,7 @@ static void vxhs_refresh_limits(BlockDriverState *bs, Error **errp) static int vxhs_init_and_ref(void) { if (vxhs_ref++ == 0) { - if ((*libvxhs.iio_init)(QNIO_VERSION, vxhs_iio_callback)) { + if (iio_init(QNIO_VERSION, vxhs_iio_callback)) { return -ENODEV; } } @@ -328,7 +236,7 @@ static int vxhs_init_and_ref(void) static void vxhs_unref(void) { if (--vxhs_ref == 0) { - (*libvxhs.iio_fini)(); + iio_fini(); } } @@ -398,17 +306,8 @@ static int vxhs_open(BlockDriverState *bs, QDict *options, char *client_key = NULL; char *client_cert = NULL; - bdrv_vxhs_load_libs(&local_err); - if (local_err) { - error_propagate(errp, local_err); - /* on error, cannot cleanup because the iio_fini() function - * is not loaded */ - return -EINVAL; - } - ret = vxhs_init_and_ref(); if (ret < 0) { - error_setg(&local_err, "libvxhs iio_init() failed"); ret = -EINVAL; goto out; } @@ -493,8 +392,8 @@ static int vxhs_open(BlockDriverState *bs, QDict *options, /* * Open qnio channel to storage agent if not opened before */ - dev_handlep = (*libvxhs.iio_open)(of_vsa_addr, s->vdisk_guid, 0, - cacert, client_key, client_cert); + dev_handlep = iio_open(of_vsa_addr, s->vdisk_guid, 0, + cacert, client_key, client_cert); if (dev_handlep == NULL) { trace_vxhs_open_iio_open(of_vsa_addr); ret = -ENODEV; @@ -554,11 +453,11 @@ static BlockAIOCB *vxhs_aio_rw(BlockDriverState *bs, uint64_t offset, switch (iodir) { case VDISK_AIO_WRITE: - ret = (*libvxhs.iio_writev)(dev_handle, acb, qiov->iov, qiov->niov, + ret = iio_writev(dev_handle, acb, qiov->iov, qiov->niov, offset, size, iio_flags); break; case VDISK_AIO_READ: - ret = (*libvxhs.iio_writev)(dev_handle, acb, qiov->iov, qiov->niov, + ret = iio_readv(dev_handle, acb, qiov->iov, qiov->niov, offset, size, iio_flags); break; default: @@ -607,7 +506,7 @@ static void vxhs_close(BlockDriverState *bs) * Close vDisk device */ if (s->vdisk_hostinfo.dev_handle) { - (*libvxhs.iio_close)(s->vdisk_hostinfo.dev_handle); + iio_close(s->vdisk_hostinfo.dev_handle); s->vdisk_hostinfo.dev_handle = NULL; } @@ -629,7 +528,7 @@ static int64_t vxhs_get_vdisk_stat(BDRVVXHSState *s) int ret = 0; void *dev_handle = s->vdisk_hostinfo.dev_handle; - ret = (*libvxhs.iio_ioctl)(dev_handle, IOR_VDISK_STAT, &vdisk_size, 0); + ret = iio_ioctl(dev_handle, IOR_VDISK_STAT, &vdisk_size, 0); if (ret < 0) { trace_vxhs_get_vdisk_stat_err(s->vdisk_guid, ret, errno); return -EIO; diff --git a/configure b/configure index d6d5912..8cb6740 100755 --- a/configure +++ b/configure @@ -3616,7 +3616,7 @@ fi glib_req_ver=2.40 glib_modules=gthread-2.0 -if test "$modules" = yes -o "$vxhs" = yes; then +if test "$modules" = yes; then glib_modules="$glib_modules gmodule-export-2.0" fi @@ -5760,6 +5760,33 @@ if compile_prog "" "" ; then fi ########################################## +# Veritas HyperScale block driver VxHS +# Check if libvxhs is installed + +if test "$vxhs" != "no" ; then + cat > $TMPC < +#include + +void *vxhs_callback; + +int main(void) { + iio_init(QNIO_VERSION, vxhs_callback); + return 0; +} +EOF + vxhs_libs="-lvxhs -lssl" + if compile_prog "" "$vxhs_libs" ; then + vxhs=yes + else + if test "$vxhs" = "yes" ; then + feature_not_found "vxhs block device" "Install libvxhs See github" + fi + vxhs=no + fi +fi + +########################################## # check for _Static_assert() have_static_assert=no @@ -7195,8 +7222,8 @@ elif test "$pthread_setname_np_wo_tid" = "yes" ; then fi if test "$vxhs" = "yes" ; then - echo "CONFIG_VXHS=m" >> $config_host_mak - echo "VXHS_LIBS= -lssl" >> $config_host_mak + echo "CONFIG_VXHS=y" >> $config_host_mak + echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak fi if test "$libpmem" = "yes" ; then -- 1.8.3.1