]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Rebuildmap: strip local host name from device name.
authorNeilBrown <neilb@suse.de>
Mon, 3 Nov 2014 01:49:05 +0000 (12:49 +1100)
committerNeilBrown <neilb@suse.de>
Mon, 3 Nov 2014 01:49:05 +0000 (12:49 +1100)
When /run/mdadm/map is being rebuilt, e.g. by "mdadm -Ir",
if the device doesn't exist in /dev, we have to choose
a name.
Currently we don't strip the hostname which is wrong if
it is the local host.

Reported-by: Stephen Kent <smkent@smkent.net>
Signed-off-by: NeilBrown <neilb@suse.de>
mapfile.c

index 4e7f24214b8ad8b4430855b186df3eaa1ce7163b..41599df05f979c22136b0084bca1f776ed15f0c5 100644 (file)
--- a/mapfile.c
+++ b/mapfile.c
@@ -455,12 +455,19 @@ void RebuildMap(void)
                                                        sep = "";
                                                }
                                        }
-                                       if (strchr(name, ':'))
-                                               /* probably a uniquifying
+                                       if (strchr(name, ':')) {
+                                               /* Probably a uniquifying
                                                 * hostname prefix.  Allow
-                                                * without a suffix
+                                                * without a suffix, and strip
+                                                * hostname if it is us.
                                                 */
+                                               if (homehost && unum == -1 &&
+                                                   strncmp(name, homehost,
+                                                           strlen(homehost)) == 0 &&
+                                                   name[strlen(homehost)] == ':')
+                                                       name += strlen(homehost)+1;
                                                unum = -1;
+                                       }
 
                                        while (conflict) {
                                                if (unum >= 0)