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;
}
cnlen = strlen(cname);
while (conflict) {
- if (trustworthy == METADATA)
+ if (trustworthy == METADATA && !isdigit(cname[cnlen-1]))
sprintf(cname+cnlen, "%d", unum);
else
/* add _%d to FOREIGN array that don't
conflict = 0;
}
}
- if (cname[0] == 0)
+
+ if (dev)
+ strcpy(chosen, dev);
+ else if (cname[0] == 0)
strcpy(chosen, devname);
/* We have a device number and name.