summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mdadm.h1
-rw-r--r--mdstat.c6
-rw-r--r--sysfs.c8
-rw-r--r--util.c16
4 files changed, 15 insertions, 16 deletions
diff --git a/mdadm.h b/mdadm.h
index 7a6b63f4..72104da1 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 040df150..4bb29d85 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 b7a95eda..847a4e1e 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 55342664..0c1dfeeb 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;