[lvm-devel] LVM2 ./WHATS_NEW libdm/libdm-common.c
prajnoha at sourceware.org
prajnoha at sourceware.org
Fri Sep 11 15:56:07 UTC 2009
CVSROOT: /cvs/lvm2
Module name: LVM2
Changes by: prajnoha at sourceware.org 2009-09-11 15:56:07
Modified files:
. : WHATS_NEW
libdm : libdm-common.c
Log message:
Check that udev is running and set internal state appropriately.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1256&r2=1.1257
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/libdm-common.c.diff?cvsroot=lvm2&r1=1.77&r2=1.78
--- LVM2/WHATS_NEW 2009/09/11 15:55:07 1.1256
+++ LVM2/WHATS_NEW 2009/09/11 15:56:06 1.1257
@@ -1,5 +1,6 @@
Version 2.02.52 -
=================================
+ Check that udev is running and set internal state appropriately.
Add libudev configuration check.
Add lvm2app.sh to nightly tests conditional upon configure --enable-applib.
Update lvm_vg_remove to require lvm_vg_write to commit remove to disk.
--- LVM2/libdm/libdm-common.c 2009/09/03 21:51:26 1.77
+++ LVM2/libdm/libdm-common.c 2009/09/11 15:56:07 1.78
@@ -28,6 +28,9 @@
# include <sys/types.h>
# include <sys/ipc.h>
# include <sys/sem.h>
+#ifdef HAVE_UDEV_QUEUE_GET_UDEV_IS_ACTIVE
+# include <libudev.h>
+#endif
#endif
#ifdef linux
@@ -45,6 +48,7 @@
static int _verbose = 0;
#ifdef UDEV_SYNC_SUPPORT
+static int _udev_running = -1;
static int _sync_with_udev = 1;
#endif
@@ -825,14 +829,58 @@
#else /* UDEV_SYNC_SUPPORT */
+
+static int _check_udev_is_running(void)
+{
+ #ifndef HAVE_UDEV_QUEUE_GET_UDEV_IS_ACTIVE
+ log_debug("Could not get udev state because libudev library "
+ "was not found and it was not compiled in. "
+ "Assuming udev is not running.");
+ return 0;
+ #else /* HAVE_UDEV_QUEUE_GET_UDEV_IS_ACTIVE */
+ struct udev *udev;
+ struct udev_queue *udev_queue;
+ int r;
+
+ if (!(udev = udev_new()))
+ goto error;
+
+ if (!(udev_queue = udev_queue_new(udev))) {
+ udev_unref(udev);
+ goto error;
+ }
+
+ r = udev_queue_get_udev_is_active(udev_queue);
+
+ if (!r)
+ log_debug("Udev is not running. "
+ "Not using udev synchronisation code.");
+
+ udev_queue_unref(udev_queue);
+ udev_unref(udev);
+
+ return r;
+
+error:
+ log_debug("Could not get udev state. Assuming udev is not running.");
+ return 0;
+ #endif /* HAVE_UDEV_QUEUE_GET_UDEV_IS_ACTIVE */
+}
+
void dm_udev_set_sync_support(int sync_with_udev)
{
+ if (_udev_running < 0)
+ _udev_running = _check_udev_is_running();
+
_sync_with_udev = sync_with_udev;
}
int dm_udev_get_sync_support(void)
{
- return _sync_with_udev;
+ if (_udev_running < 0)
+ _udev_running = _check_udev_is_running();
+
+ return _udev_running && _sync_with_udev;
}
static int _get_cookie_sem(uint32_t cookie, int *semid)
More information about the lvm-devel
mailing list