]> sourceware.org Git - lvm2.git/commitdiff
Avoid selecting names under /dev/block if there is an alternative.
authorAlasdair Kergon <agk@redhat.com>
Mon, 24 May 2010 22:53:48 +0000 (22:53 +0000)
committerAlasdair Kergon <agk@redhat.com>
Mon, 24 May 2010 22:53:48 +0000 (22:53 +0000)
WHATS_NEW
lib/device/dev-cache.c

index 2645b535c33b2052b26f2836465d8cdf38dd0702..3b02d7dff015a8b87ca07a938784138060af436c 100644 (file)
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.02.67 -
 ===============================
+  Avoid selecting names under /dev/block if there is an alternative.
   Update clustered log kernel module name to log-userspace for 2.6.31 onwards.
   Activate only first head of Replicator for vgchange -ay.
   Add Replicators' LVs to dtree for activation.
index 45c0e8f82059f3a7d7cdef5c19f2c35fe983ec1e..f6c8a467e8b9c91d93e2cb813571a6362f4fa563 100644 (file)
@@ -40,6 +40,7 @@ static struct {
        struct dm_hash_table *names;
        struct btree *devices;
        struct dm_regex *preferred_names_matcher;
+       const char *dev_dir;
 
        int has_scanned;
        struct dm_list dirs;
@@ -155,6 +156,7 @@ static int _compare_paths(const char *path0, const char *path1)
        char p0[PATH_MAX], p1[PATH_MAX];
        char *s0, *s1;
        struct stat stat0, stat1;
+       size_t devdir_len;
 
        /*
         * FIXME Better to compare patterns one-at-a-time against all names.
@@ -179,6 +181,19 @@ static int _compare_paths(const char *path0, const char *path1)
         * Built-in rules.
         */
 
+       /*
+        * Anything beats /dev/block.
+        */
+       devdir_len = strlen(_cache.dev_dir);
+       if (!strncmp(path0, _cache.dev_dir, devdir_len) &&
+           !strncmp(path1, _cache.dev_dir, devdir_len)) {
+               if (!strncmp(path0 + devdir_len, "block/", 6)) {
+                       if (strncmp(path1 + devdir_len, "block/", 6))
+                               return 1;
+               } else if (!strncmp(path1 + devdir_len, "block/", 6))
+                       return 0;
+       }
+
        /* Return the path with fewer slashes */
        for (p = path0; p++; p = (const char *) strchr(p, '/'))
                slash0++;
@@ -545,6 +560,11 @@ int dev_cache_init(struct cmd_context *cmd)
                goto bad;
        }
 
+       if (!(_cache.dev_dir = _strdup(cmd->dev_dir))) {
+               log_error("strdup dev_dir failed.");
+               goto bad;
+       }
+
        dm_list_init(&_cache.dirs);
        dm_list_init(&_cache.files);
 
This page took 2.002673 seconds and 5 git commands to generate.