]> sourceware.org Git - lvm2.git/commitdiff
dev-ext: issue error if external_device_info_source=udev and udev db record incomplete
authorPeter Rajnoha <prajnoha@redhat.com>
Wed, 11 Nov 2015 12:13:54 +0000 (13:13 +0100)
committerPeter Rajnoha <prajnoha@redhat.com>
Wed, 11 Nov 2015 12:14:07 +0000 (13:14 +0100)
Udev db records are marked as not initialized (incomplete) on timeout.
Issue an error message whenever LVM finds such records so users are
aware that something's going wrong with udev db.

This is important in case we use devices/external_device_info_source="udev"
where udev database records are used to do various filtering decisions.

For example:

udev log of timed out worker:

Nov 11 13:02:25 raw.virt systemd-udevd[607]: seq 1997 '/devices/virtual/block/dm-2' is taking a long time
Nov 11 13:04:25 raw.virt systemd-udevd[607]: seq 1997 '/devices/virtual/block/dm-2' killed
Nov 11 13:04:25 raw.virt systemd-udevd[607]: worker [11221] terminated by signal 9 (Killed)
Nov 11 13:04:25 raw.virt systemd-udevd[607]: worker [11221] failed while handling '/devices/virtual/block/dm-2'
...

LVM also issues error message visibly if incomplete udev db record is found,
devices/external_device_info_source="udev" is set:

$ pvs
  Udev database has incomplete information about device /dev/dm-2.
  Failed to get external handle for device /dev/dm-2 [udev].
  ...

WHATS_NEW
lib/device/dev-ext.c

index 5938a994bdb2f81f231c93cdcfc3083be55da07c..2dea99cbd857cd5cd0f5aee8ded6f3856d806c5c 100644 (file)
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.02.135 - 
 ====================================
+  Issue error if external_device_info_source=udev and udev db record incomplete.
   Fix passing of 32bit values through daemons (mostly lvmlockd).
   Use local memory pool for whole alloc_handle manipulation.
   Add missing pointer validation after dm_get_next_target().
index 8f2024e9249a08aa910c09d768398b30bca3ed61..22e9a6ddab310dbe726223b722289bb30229b59b 100644 (file)
@@ -60,6 +60,12 @@ static struct dev_ext *_dev_ext_get_udev(struct device *dev)
        if (!(udev_device = udev_device_new_from_devnum(udev, 'b', dev->dev)))
                return_NULL;
 
+       if (!udev_device_get_is_initialized(udev_device)) {
+               /* Timeout or some other udev db inconsistency! */
+               log_error("Udev database has incomplete information about device %s.", dev_name(dev));
+               return NULL;
+       }
+
        dev->ext.handle = (void *) udev_device;
        return &dev->ext;
 #else
This page took 0.053511 seconds and 5 git commands to generate.