From c8a14a29cdcf7e800af16f9b6a8fa9ed49250d30 Mon Sep 17 00:00:00 2001 From: Peter Rajnoha Date: Tue, 6 Sep 2016 13:12:02 +0200 Subject: [PATCH] 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/". 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(+) diff --git a/lib/device/dev-ext-udev-constants.h b/lib/device/dev-ext-udev-constants.h index 5b9a09627..168f8f1e8 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 f1828f41b..32471aab7 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,