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
This commit is contained in:
Daniel P. Berrange 2009-09-10 14:21:10 +01:00
parent 7ec20935bd
commit fcd4e26943
12 changed files with 55 additions and 47 deletions

View File

@ -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 ==========================================================================

View File

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

View File

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

View File

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

View File

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

View File

@ -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__ */

View File

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

View File

@ -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) {

View File

@ -332,7 +332,7 @@ virStorageBackendMpathRefreshPool(virConnectPtr conn,
pool->def->allocation = pool->def->capacity = pool->def->available = 0;
virStorageBackendWaitForDevices(conn);
virFileWaitForDevices(conn);
virStorageBackendGetMaps(conn, pool);

View File

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

View File

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

View File

@ -237,4 +237,6 @@ int virRandom(int max);
char *virFileFindMountPoint(const char *type);
#endif
void virFileWaitForDevices(virConnectPtr conn);
#endif /* __VIR_UTIL_H__ */