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@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list