[libvirt] [PATCH] Fix use of dlopen modules
Daniel Veillard
veillard at redhat.com
Thu Sep 10 13:57:07 UTC 2009
On Thu, Sep 10, 2009 at 02:31:00PM +0100, Daniel P. Berrange wrote:
> Remove the bogus dependancy between node_device.c & storage_backend.c
> by moving the virWaitForDevices into util.h where it can be shared
> safely
>
> * src/storage_backend_disk.c, src/storage_backend_logical.c,
> src/storage_backend_mpath.c, src/storage_backend_scsi.c: Replace
> virStorageBackendWaitForDevices with virFileWaitForDevices
> * src/storage_backend.c, src/storage_backend.h: Remove
> virStorageBackendWaitForDevices, virWaitForDevices
> * src/util.h, src/util.c: Add virFileWaitForDevices
> * configure.in: Move xmlrpc check further down after pkgconfig
> is detected
> * src/Makefile.am: Add missing XMLRPC_CFLAGS/LIBS to opennebula
> * src/libvirt_private.syms: Add many missing exports
> ---
> configure.in | 6 +++---
> src/Makefile.am | 4 ++--
> src/libvirt_private.syms | 14 +++++++++++++-
> src/node_device.c | 4 ++--
> src/storage_backend.c | 31 -------------------------------
> src/storage_backend.h | 2 --
> src/storage_backend_disk.c | 4 ++--
> src/storage_backend_logical.c | 2 +-
> src/storage_backend_mpath.c | 2 +-
> src/storage_backend_scsi.c | 4 ++--
> src/util.c | 27 +++++++++++++++++++++++++++
> src/util.h | 2 ++
> 12 files changed, 55 insertions(+), 47 deletions(-)
>
> diff --git a/configure.in b/configure.in
> index 060eb50..120f7e7 100644
> --- a/configure.in
> +++ b/configure.in
> @@ -463,6 +463,9 @@ if test "$with_qemu" = "yes" -o "$with_lxc" = "yes" ; then
> fi
>
>
> +dnl Need to test if pkg-config exists
> +PKG_PROG_PKG_CONFIG
> +
> dnl OpenNebula driver Compilation setting
> dnl
>
> @@ -491,9 +494,6 @@ AC_SUBST([XMLRPC_CFLAGS])
> AC_SUBST([XMLRPC_LIBS])
>
>
> -dnl Need to test if pkg-config exists
> -PKG_PROG_PKG_CONFIG
> -
> dnl ==========================================================================
> dnl find libxml2 library, borrowed from xmlsec
> dnl ==========================================================================
> diff --git a/src/Makefile.am b/src/Makefile.am
> index 628edc5..02c1f74 100644
> --- a/src/Makefile.am
> +++ b/src/Makefile.am
> @@ -396,8 +396,8 @@ noinst_LTLIBRARIES += libvirt_driver_one.la
> # Stateful, so linked to daemon instead
> #libvirt_la_LIBADD += libvirt_driver_one.la
> endif
> -libvirt_driver_one_la_CFLAGS = $(ONE_LIBS)
> -libvirt_driver_one_la_LDFLAGS = $(ONE_LIBS)
> +libvirt_driver_one_la_CFLAGS = $(XMLRPC_CFLAGS)
> +libvirt_driver_one_la_LDFLAGS = $(XMLRPC_LIBS)
> #libvirt_driver_one_la_CFLAGS = "-DWITH_ONE"
> if WITH_DRIVER_MODULES
> libvirt_driver_one_la_LDFLAGS += -module -avoid-version
Okay, those 2 are really unrelated, but ACK
> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> index 8dd279d..06192fc 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -10,6 +10,7 @@ virBufferAdd;
> virBufferAddChar;
> virBufferContentAndReset;
> virBufferError;
> +virBufferURIEncodeString;
>
>
> # caps.h
> @@ -167,7 +168,16 @@ virHashSize;
> virInterfaceDefFormat;
> virInterfaceDefParseFile;
> virInterfaceDefParseString;
> +virInterfaceDefParseNode;
> virInterfaceDefFree;
> +virInterfaceFindByName;
> +virInterfaceFindByMACString;
> +virInterfaceAssignDef;
> +virInterfaceRemove;
> +virInterfaceObjLock;
> +virInterfaceObjUnlock;
> +virInterfaceObjListFree;
> +
>
> # interface_driver.h
> interfaceRegister;
> @@ -214,6 +224,7 @@ virRegisterNetworkDriver;
> virRegisterStateDriver;
> virRegisterStorageDriver;
> virRegisterDeviceMonitor;
> +virRegisterSecretDriver;
>
>
> # logging.h
> @@ -410,6 +421,7 @@ virGetUserName;
> virGetUserID;
> virGetGroupID;
> virFileFindMountPoint;
> +virFileWaitForDevices;
>
>
> # uuid.h
> @@ -421,7 +433,7 @@ virUUIDParse;
> # virterror_internal.h
> virReportErrorHelper;
> virErrorMsg;
> -virRaiseError;
> +virRaiseErrorFull;
> virReportSystemErrorFull;
> virReportOOMErrorFull;
> virStrerror;
ACK
> diff --git a/src/node_device.c b/src/node_device.c
> index ded203f..69e15b6 100644
> --- a/src/node_device.c
> +++ b/src/node_device.c
> @@ -35,7 +35,7 @@
> #include "node_device_conf.h"
> #include "node_device_hal.h"
> #include "node_device.h"
> -#include "storage_backend.h" /* For virWaitForDevices */
> +#include "util.h"
>
> #define VIR_FROM_THIS VIR_FROM_NODEDEV
>
> @@ -599,7 +599,7 @@ find_new_device(virConnectPtr conn, const char *wwnn, const char *wwpn)
>
> while ((now - start) < LINUX_NEW_DEVICE_WAIT_TIME) {
>
> - virWaitForDevices(conn);
> + virFileWaitForDevices(conn);
>
> dev = nodeDeviceLookupByWWN(conn, wwnn, wwpn);
>
> diff --git a/src/storage_backend.c b/src/storage_backend.c
> index 5e04f35..0a20255 100644
> --- a/src/storage_backend.c
> +++ b/src/storage_backend.c
> @@ -630,31 +630,6 @@ virStorageBackendGetBuildVolFromFunction(virConnectPtr conn,
> return virStorageBackendCreateRaw;
> }
>
> -#if defined(UDEVADM) || defined(UDEVSETTLE)
> -void virWaitForDevices(virConnectPtr conn)
> -{
> -#ifdef UDEVADM
> - const char *const settleprog[] = { UDEVADM, "settle", NULL };
> -#else
> - const char *const settleprog[] = { UDEVSETTLE, NULL };
> -#endif
> - int exitstatus;
> -
> - if (access(settleprog[0], X_OK) != 0)
> - return;
> -
> - /*
> - * NOTE: we ignore errors here; this is just to make sure that any device
> - * nodes that are being created finish before we try to scan them.
> - * If this fails for any reason, we still have the backup of polling for
> - * 5 seconds for device nodes.
> - */
> - virRun(conn, settleprog, &exitstatus);
> -}
> -#else
> -void virWaitForDevices(virConnectPtr conn ATTRIBUTE_UNUSED) {}
> -#endif
> -
>
> virStorageBackendPtr
> virStorageBackendForType(int type) {
> @@ -893,12 +868,6 @@ virStorageBackendUpdateVolTargetFormatFD(virConnectPtr conn,
> }
>
>
> -void virStorageBackendWaitForDevices(virConnectPtr conn)
> -{
> - virWaitForDevices(conn);
> - return;
> -}
> -
> /*
> * Given a volume path directly in /dev/XXX, iterate over the
> * entries in the directory pool->def->target.path and find the
> diff --git a/src/storage_backend.h b/src/storage_backend.h
> index eb5bf87..88c6161 100644
> --- a/src/storage_backend.h
> +++ b/src/storage_backend.h
> @@ -95,7 +95,6 @@ int
> virStorageBackendUpdateVolTargetFormatFD(virConnectPtr conn,
> virStorageVolTargetPtr target,
> int fd);
> -void virStorageBackendWaitForDevices(virConnectPtr conn);
>
> char *virStorageBackendStablePath(virConnectPtr conn,
> virStoragePoolObjPtr pool,
> @@ -128,6 +127,5 @@ int virStorageBackendRunProgNul(virConnectPtr conn,
> virStorageBackendListVolNulFunc func,
> void *data);
>
> -void virWaitForDevices(virConnectPtr conn);
>
> #endif /* __VIR_STORAGE_BACKEND_H__ */
> diff --git a/src/storage_backend_disk.c b/src/storage_backend_disk.c
> index 6fdb566..e82959c 100644
> --- a/src/storage_backend_disk.c
> +++ b/src/storage_backend_disk.c
> @@ -325,7 +325,7 @@ virStorageBackendDiskRefreshPool(virConnectPtr conn,
> VIR_FREE(pool->def->source.devices[0].freeExtents);
> pool->def->source.devices[0].nfreeExtent = 0;
>
> - virStorageBackendWaitForDevices(conn);
> + virFileWaitForDevices(conn);
>
> if (virStorageBackendDiskReadGeometry(conn, pool) != 0) {
> return -1;
> @@ -583,7 +583,7 @@ virStorageBackendDiskCreateVol(virConnectPtr conn,
> return -1;
>
> /* wait for device node to show up */
> - virStorageBackendWaitForDevices(conn);
> + virFileWaitForDevices(conn);
>
> /* Blow away free extent info, as we're about to re-populate it */
> VIR_FREE(pool->def->source.devices[0].freeExtents);
> diff --git a/src/storage_backend_logical.c b/src/storage_backend_logical.c
> index 43117e8..4389120 100644
> --- a/src/storage_backend_logical.c
> +++ b/src/storage_backend_logical.c
> @@ -478,7 +478,7 @@ virStorageBackendLogicalRefreshPool(virConnectPtr conn,
> };
> int exitstatus;
>
> - virStorageBackendWaitForDevices(conn);
> + virFileWaitForDevices(conn);
>
> /* Get list of all logical volumes */
> if (virStorageBackendLogicalFindLVs(conn, pool, NULL) < 0) {
> diff --git a/src/storage_backend_mpath.c b/src/storage_backend_mpath.c
> index ae02aac..fcc38ba 100644
> --- a/src/storage_backend_mpath.c
> +++ b/src/storage_backend_mpath.c
> @@ -332,7 +332,7 @@ virStorageBackendMpathRefreshPool(virConnectPtr conn,
>
> pool->def->allocation = pool->def->capacity = pool->def->available = 0;
>
> - virStorageBackendWaitForDevices(conn);
> + virFileWaitForDevices(conn);
>
> virStorageBackendGetMaps(conn, pool);
>
> diff --git a/src/storage_backend_scsi.c b/src/storage_backend_scsi.c
> index a09103f..c70b1ed 100644
> --- a/src/storage_backend_scsi.c
> +++ b/src/storage_backend_scsi.c
> @@ -494,7 +494,7 @@ virStorageBackendSCSIFindLUs(virConnectPtr conn,
>
> VIR_DEBUG(_("Discovering LUs on host %u"), scanhost);
>
> - virStorageBackendWaitForDevices(conn);
> + virFileWaitForDevices(conn);
>
> if (virAsprintf(&device_path, "/sys/bus/scsi/devices") < 0) {
> virReportOOMError(conn);
> @@ -542,7 +542,7 @@ virStorageBackendSCSIGetHostNumber(virConnectPtr conn,
>
> VIR_DEBUG(_("Finding host number from '%s'"), sysfs_path);
>
> - virStorageBackendWaitForDevices(conn);
> + virFileWaitForDevices(conn);
>
> sysdir = opendir(sysfs_path);
>
> diff --git a/src/util.c b/src/util.c
> index af50028..1878e33 100644
> --- a/src/util.c
> +++ b/src/util.c
> @@ -2019,3 +2019,30 @@ cleanup:
> return ret;
> }
> #endif
> +
> +#ifndef PROXY
> +#if defined(UDEVADM) || defined(UDEVSETTLE)
> +void virFileWaitForDevices(virConnectPtr conn)
> +{
> +#ifdef UDEVADM
> + const char *const settleprog[] = { UDEVADM, "settle", NULL };
> +#else
> + const char *const settleprog[] = { UDEVSETTLE, NULL };
> +#endif
> + int exitstatus;
> +
> + if (access(settleprog[0], X_OK) != 0)
> + return;
> +
> + /*
> + * NOTE: we ignore errors here; this is just to make sure that any device
> + * nodes that are being created finish before we try to scan them.
> + * If this fails for any reason, we still have the backup of polling for
> + * 5 seconds for device nodes.
> + */
> + virRun(conn, settleprog, &exitstatus);
> +}
> +#else
> +void virFileWaitForDevices(virConnectPtr conn ATTRIBUTE_UNUSED) {}
> +#endif
> +#endif
> diff --git a/src/util.h b/src/util.h
> index 896e1b4..f9715ab 100644
> --- a/src/util.h
> +++ b/src/util.h
> @@ -237,4 +237,6 @@ int virRandom(int max);
> char *virFileFindMountPoint(const char *type);
> #endif
>
> +void virFileWaitForDevices(virConnectPtr conn);
> +
> #endif /* __VIR_UTIL_H__ */
> --
> 1.6.2.5
Okay, refactoring is fine, ACK
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list