From fcd4e2694380fc1829109aaea7aa3808918a933c Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Thu, 10 Sep 2009 14:21:10 +0100 Subject: [PATCH] Fix use of dlopen modules 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 060eb50a19..120f7e7ea2 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 8bdfe3cf78..2a047cda13 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -397,8 +397,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 diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 16bdc3f89c..a238652951 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 @@ -412,6 +423,7 @@ virGetUserName; virGetUserID; virGetGroupID; virFileFindMountPoint; +virFileWaitForDevices; # usb.h usbGetDevice; @@ -427,7 +439,7 @@ virUUIDParse; # virterror_internal.h virReportErrorHelper; virErrorMsg; -virRaiseError; +virRaiseErrorFull; virReportSystemErrorFull; virReportOOMErrorFull; virStrerror; diff --git a/src/node_device.c b/src/node_device.c index ded203f557..69e15b66a2 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 5e04f35c14..0a20255a57 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 eb5bf87f19..88c6161371 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 6fdb56647c..e82959cca6 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 43117e8567..4389120815 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 ae02aacc0e..fcc38bad86 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 a09103fd29..c70b1edb57 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 af50028c1d..1878e33cac 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 896e1b4af8..f9715ab52b 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__ */