diff options
author | Neil Brown <neilb@suse.de> | 2005-06-14 06:33:56 +0000 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2005-06-14 06:33:56 +0000 |
commit | b79713f8c103031e10bb41bb552a023a884b2ad4 (patch) | |
tree | bc65f562ec9b785ea52b0bc0b8009afdb467eff7 /util.c | |
parent | 60f9166418e49751280f5af4cf02c6ed3e573eb0 (diff) | |
download | mdadm-b79713f8c103031e10bb41bb552a023a884b2ad4.tar.gz mdadm-b79713f8c103031e10bb41bb552a023a884b2ad4.tar.xz mdadm-b79713f8c103031e10bb41bb552a023a884b2ad4.zip |
When finding a /dev name for a device, prefer shorter names
Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
Diffstat (limited to 'util.c')
-rw-r--r-- | util.c | 22 |
1 files changed, 15 insertions, 7 deletions
@@ -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 |