[libvirt] [PATCH] Fix use of dlopen modules

Daniel P. Berrange berrange at redhat.com
Thu Sep 10 13:31:00 UTC 2009


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
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;
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




More information about the libvir-list mailing list