[lvm-devel] master - dev-type: check for DEVLINKS udev db variable existence if udev_device_get_is_initialized fn is not present

Peter Rajnoha prajnoha at fedoraproject.org
Tue Sep 6 11:22:22 UTC 2016


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=c8a14a29cdcf7e800af16f9b6a8fa9ed49250d30
Commit:        c8a14a29cdcf7e800af16f9b6a8fa9ed49250d30
Parent:        2e4821a847debe9a7c48b9dd0f218eff030dfce2
Author:        Peter Rajnoha <prajnoha at redhat.com>
AuthorDate:    Tue Sep 6 13:12:02 2016 +0200
Committer:     Peter Rajnoha <prajnoha at redhat.com>
CommitterDate: Tue Sep 6 13:21:29 2016 +0200

dev-type: check for DEVLINKS udev db variable existence if udev_device_get_is_initialized fn is not present

Older udev versions (udev < v165), don't have the official
udev_device_get_is_initialized function available to query for
device initialization state in udev database. Also, devices don't
have USEC_INITIALIZED udev db variable set - this is bound to the
udev_device_get_is_initialized fn functionality.

In this case, check for "DEVLINKS" variable instead - all block devices
have at least one symlink set for the node (the "/dev/block/<major:minor>".
This symlink is set by default basic udev rules provided by udev directly.
We'll use this as an alternative for the check that initial udev
processing for a device has already finished.
---
 lib/device/dev-ext-udev-constants.h |    3 +++
 lib/device/dev-type.c               |    5 +++++
 2 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/lib/device/dev-ext-udev-constants.h b/lib/device/dev-ext-udev-constants.h
index 5b9a096..168f8f1 100644
--- a/lib/device/dev-ext-udev-constants.h
+++ b/lib/device/dev-ext-udev-constants.h
@@ -36,6 +36,9 @@
 #define DEV_EXT_UDEV_DEVTYPE			"DEVTYPE"
 #define DEV_EXT_UDEV_DEVTYPE_DISK		"disk"
 
+/* the list of symlinks associated with device node */
+#define DEV_EXT_UDEV_DEVLINKS			"DEVLINKS"
+
 /*
  * DEV_EXT_UDEV_MPATH_DEVICE_PATH is set by multipath in udev db
  * with value either 0 or 1. The same functionality as
diff --git a/lib/device/dev-type.c b/lib/device/dev-type.c
index f1828f4..32471aa 100644
--- a/lib/device/dev-type.c
+++ b/lib/device/dev-type.c
@@ -1024,8 +1024,13 @@ int udev_dev_is_mpath_component(struct device *dev)
 			return 0;
 		}
 
+#ifdef HAVE_LIBUDEV_UDEV_DEVICE_GET_IS_INITIALIZED
 		if ((initialized = udev_device_get_is_initialized(udev_device)))
 			break;
+#else
+		if ((initialized = (udev_device_get_property_value(udev_device, DEV_EXT_UDEV_DEVLINKS) != NULL)))
+			break;
+#endif
 
 		log_debug("Device %s not initialized in udev database (%u/%u, %u microseconds).", dev_name(dev),
 			   i + 1, UDEV_DEV_IS_MPATH_COMPONENT_ITERATION_COUNT,




More information about the lvm-devel mailing list