diff --git a/mdadm.h b/mdadm.h index 7a6b63f..72104da 100644 --- a/mdadm.h +++ b/mdadm.h @@ -775,6 +775,7 @@ extern int mdmon_running(int devnum); extern int signal_mdmon(int devnum); extern char *devnum2devname(int num); +extern int devname2devnum(char *name); extern int fd2devnum(int fd); static inline int dev2major(int d) diff --git a/mdstat.c b/mdstat.c index 040df15..4bb29d8 100644 --- a/mdstat.c +++ b/mdstat.c @@ -191,11 +191,7 @@ struct mdstat_ent *mdstat_read(int hold, int start) * there. */ struct mdstat_ent **ih; - int dn2; - if (strncmp(w, "md_d", 4)==0) - dn2 = -1-strtoul(w+4, &ep, 10); - else - dn2 = strtoul(w+2, &ep, 10); + int dn2 = devname2devnum(w); ih = &all; while (ih != insert_here && *ih && (*ih)->devnum != dn2) diff --git a/sysfs.c b/sysfs.c index b7a95ed..847a4e1 100644 --- a/sysfs.c +++ b/sysfs.c @@ -59,15 +59,9 @@ void sysfs_free(struct mdinfo *sra) int sysfs_open(int devnum, char *devname, char *attr) { char fname[50]; - char sys_name[16]; int fd; - if (devnum >= 0) - sprintf(sys_name, "md%d", devnum); - else - sprintf(sys_name, "md_d%d", - -1-devnum); - sprintf(fname, "/sys/block/%s/md/", sys_name); + sprintf(fname, "/sys/block/%s/md/", devnum2devname(devnum)); if (devname) { strcat(fname, devname); strcat(fname, "/"); diff --git a/util.c b/util.c index 5534266..0c1dfee 100644 --- a/util.c +++ b/util.c @@ -826,10 +826,7 @@ struct supertype *super_by_fd(int fd) int devnum; if (subarray) *subarray++ = '\0'; - if (strncmp(dev, "md_d", 4) == 0) - devnum = -1-atoi(dev+4); - else - devnum = atoi(dev+2); + devnum = devname2devnum(dev); subarray = strdup(subarray); if (sra) sysfs_free(sra); @@ -1013,6 +1010,17 @@ char *devnum2devname(int num) return strdup(name); } +int devname2devnum(char *name) +{ + char *ep; + int num; + if (strncmp(name, "md_d", 4)==0) + num = -1-strtoul(name+4, &ep, 10); + else + num = strtoul(name+2, &ep, 10); + return num; +} + int fd2devnum(int fd) { struct stat stb;