diff options
author | NeilBrown <neilb@suse.de> | 2013-01-07 10:38:46 +1100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2013-01-10 14:04:54 +1100 |
commit | 9dc7d3576a2c0be1b113088ef1841bbfe24374a6 (patch) | |
tree | 27e88fb207029dd15ed12a044268d67fa5dfa1d1 /util.c | |
parent | 9bc4ae77e40b5af3cd4be3e4d5aff18e6964e8fa (diff) | |
download | mdadm-9dc7d3576a2c0be1b113088ef1841bbfe24374a6.tar.gz |
dev_open - don't bother trying map_dev
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>
Diffstat (limited to 'util.c')
-rw-r--r-- | util.c | 16 |
1 files changed, 6 insertions, 10 deletions
@@ -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) { |