]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - util.c
Introduce devname2devnum
[thirdparty/mdadm.git] / util.c
diff --git a/util.c b/util.c
index 49c36a06cafb43127e5be0214db8f87c4e6c6038..0c1dfeebfa94ca96b56ee3a1e2fb6d5226fd38af 100644 (file)
--- a/util.c
+++ b/util.c
@@ -761,11 +761,11 @@ int dev_open(char *dev, int flags)
                snprintf(devname, sizeof(devname), "/dev/.tmp.md.%d:%d:%d",
                         (int)getpid(), major, minor);
                if (mknod(devname, S_IFBLK|0600, makedev(major, minor))==0) {
-                       fd = open(devname, flags);
+                       fd = open(devname, flags|O_DIRECT);
                        unlink(devname);
                }
        } else
-               fd = open(dev, flags);
+               fd = open(dev, flags|O_DIRECT);
        return fd;
 }
 
@@ -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;