]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
When finding a /dev name for a device, prefer shorter names
authorNeil Brown <neilb@suse.de>
Tue, 14 Jun 2005 06:33:56 +0000 (06:33 +0000)
committerNeil Brown <neilb@suse.de>
Tue, 14 Jun 2005 06:33:56 +0000 (06:33 +0000)
Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
ChangeLog
util.c

index 847e13c35b5b5616f13a19d692a8472cb8684592..f4288e1f94b2dcc62ab8a9121d62bd08552bcef1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -14,6 +14,7 @@ Changes Prior to this release
     -   Fix parsing of /dev/md/N in is_standard
     -   Fix rounding errors in human_size()
     -   Fix silly example in mdadm.conf-examples
+    -   When finding a /dev name for a device, prefer shorter names
        
 Changes Prior to 1.11.0 release
     -   Fix embarassing bug which causes --add to always fail.
diff --git a/util.c b/util.c
index 386ec2ae4ee2e98f244ffd77bf3e4d523626279a..f3f6446219e793e92861e6aa8d29130aacfdf62a 100644 (file)
--- a/util.c
+++ b/util.c
@@ -348,12 +348,15 @@ int add_dev(const char *name, const struct stat *stb, int flag)
 
 /*
  * Find a block device with the right major/minor number.
- * Avoid /dev/mdNN and /dev/md/dNN if possible
+ * If we find multiple names, choose the shortest.
+ * If we find a non-standard name, it is probably there
+ * deliberately so prefer it over a standard name.
+ * This applies only to names for MD devices.
  */
 char *map_dev(int major, int minor)
 {
        struct devmap *p;
-       char *std = NULL;
+       char *std = NULL, *nonstd=NULL;
        if (!devlist_ready) {
 #ifndef __dietlibc__
                nftw("/dev", add_dev, 10, FTW_PHYS);
@@ -366,12 +369,17 @@ char *map_dev(int major, int minor)
        for (p=devlist; p; p=p->next)
                if (p->major == major &&
                    p->minor == minor) {
-                       if (is_standard(p->name, NULL))
-                               std = p->name;
-                       else
-                               return p->name;
+                       if (is_standard(p->name, NULL)) {
+                               if (std == NULL ||
+                                   strlen(p->name) < strlen(std))
+                                       std = p->name;
+                       } else {
+                               if (nonstd == NULL ||
+                                   strlen(p->name) < strlen(nonstd))
+                                       nonstd = p->name;
+                       }
                }
-       return std;
+       return nonstd ? nonstd : std;
 }
 
 #endif