]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
create_dev - allow array names like mdX and /dev/mdX to appear 'numeric'
authorNeilBrown <neilb@suse.de>
Mon, 11 May 2009 05:16:47 +0000 (15:16 +1000)
committerNeilBrown <neilb@suse.de>
Mon, 11 May 2009 05:16:47 +0000 (15:16 +1000)
When choosing the minor number to use with an array, we currently base
the number of the 'name' stored in the metadata if that name is
numeric.
Extend that so that if it looks like a number md device name (/dev/md0
or just md0 or even /dev/md/0), then we use the number at the end to
suggest a minor number.

The means that if someone creates and array with "--name md0" or even
"--name /dev/md0" it will continue to do what they expect.

Signed-off-by: NeilBrown <neilb@suse.de>
mdopen.c

index 5d478f5b5fdbcdb74f5572ff11788b6d6c521682..a37eb9c334b709caae9dd16ae5bec059e573997a 100644 (file)
--- a/mdopen.c
+++ b/mdopen.c
@@ -238,11 +238,19 @@ int create_mddev(char *dev, char *name, int autof, int trustworthy,
                        use_mdp = 0;
        }
        if (num < 0 && trustworthy == LOCAL && name) {
-               /* if name is numeric, use that for num
+               /* if name is numeric, possibly prefixed by 
+                * 'md' or '/dev/md', use that for num
                 * if it is not already in use */
                char *ep;
-               num = strtoul(name, &ep, 10);
-               if (ep == name || *ep)
+               char *n2 = name;
+               if (strncmp(n2, "/dev/", 5) == 0)
+                       n2 += 5;
+               if (strncmp(n2, "md", 2) == 0)
+                       n2 += 2;
+               if (*n2 == '/')
+                       n2++;
+               num = strtoul(n2, &ep, 10);
+               if (ep == n2 || *ep)
                        num = -1;
                else if (mddev_busy(use_mdp ? (-1-num) : num))
                        num = -1;