]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
dev_open - don't bother trying map_dev
authorNeilBrown <neilb@suse.de>
Sun, 6 Jan 2013 23:38:46 +0000 (10:38 +1100)
committerNeilBrown <neilb@suse.de>
Thu, 10 Jan 2013 03:04:54 +0000 (14:04 +1100)
map_dev can be slow, and doesn't really provide a better result
than just creating a temporary device.
So discard it and use mknod/open/unlink to open a major:minor device.

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

diff --git a/util.c b/util.c
index 70ab6f12ed82bb3604fb5b3a23074fc22bfcce9f..fc9043bf2345e6ef8debe15cde317533226e8452 100644 (file)
--- a/util.c
+++ b/util.c
@@ -882,18 +882,14 @@ int dev_open(char *dev, int flags)
        if (e > dev && *e == ':' && e[1] &&
            (minor = strtoul(e+1, &e, 0)) >= 0 &&
            *e == 0) {
-               char *path = map_dev(major, minor, 0);
-               if (path)
-                       fd = open(path, flags);
-               if (fd < 0) {
-                       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);
-                               unlink(devname);
-                       }
+               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);
+                       unlink(devname);
                }
                if (fd < 0) {
+                       /* Try /tmp as /dev appear to be read-only */
                        snprintf(devname, sizeof(devname), "/tmp/.tmp.md.%d:%d:%d",
                                 (int)getpid(), major, minor);
                        if (mknod(devname, S_IFBLK|0600, makedev(major, minor)) == 0) {