]> sourceware.org Git - lvm2.git/commitdiff
devcache: do not insert devices without device node
authorZdenek Kabelac <zkabelac@redhat.com>
Mon, 11 Apr 2016 08:08:16 +0000 (10:08 +0200)
committerZdenek Kabelac <zkabelac@redhat.com>
Mon, 11 Apr 2016 08:33:14 +0000 (10:33 +0200)
When not obtaining device from udev, we are doing deep devdir scan,
and at the same time we try to insert everything what /sys/dev/block
knows about. However in case  lvm2 is configured to use nonstardard
devdir this way it will see (and scan) devices from a real system.

lvm2 test suite is using its own test devdir with its
own device nodes. To avoid touching real /dev  devices, validate
the device node exist in give dir and do not insert such device
into a cache.

With obtain list from udev this patch has no effect
(the normal user path).

WHATS_NEW
lib/device/dev-cache.c

index 777c44ee326e2cf0bad9af610cf19523375214c0..f4eb6ad5f950ef5ea95378f08e5de021f634ff26 100644 (file)
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.02.151
 =================================
+  When not obtaining devs from udev, check they exist before caching them.
   Detect device mismatch also when compiling without udev support.
 
 Version 2.02.150 - 9th April 2016
index 84471ab41dfaff7e36354b49cc83efb794d871fd..6abb6a7f79f1c6741f0856ec11a7850a264828ea 100644 (file)
@@ -433,6 +433,8 @@ static struct dm_list *_get_or_add_list_by_index_key(struct dm_hash_table *idx,
 
 static struct device *_insert_sysfs_dev(dev_t devno, const char *devname)
 {
+       static struct device _fake_dev = { .flags = DEV_USED_FOR_LV };
+       struct stat stat0;
        char path[PATH_MAX];
        char *path_copy;
        struct device *dev;
@@ -442,6 +444,13 @@ static struct device *_insert_sysfs_dev(dev_t devno, const char *devname)
                return NULL;
        }
 
+       if (lstat(path, &stat0) < 0) {
+               /* When device node does not exist return fake entry.
+                * This may happen when i.e. lvm2 device dir != /dev */
+               log_debug("%s: Not available device node", path);
+               return &_fake_dev;
+       }
+
        if (!(dev = _dev_create(devno)))
                return_NULL;
 
This page took 0.049523 seconds and 5 git commands to generate.