summaryrefslogtreecommitdiff
path: root/util.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2013-01-07 10:38:46 +1100
committerNeilBrown <neilb@suse.de>2013-01-10 14:04:54 +1100
commit9dc7d3576a2c0be1b113088ef1841bbfe24374a6 (patch)
tree27e88fb207029dd15ed12a044268d67fa5dfa1d1 /util.c
parent9bc4ae77e40b5af3cd4be3e4d5aff18e6964e8fa (diff)
downloadmdadm-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.c16
1 files changed, 6 insertions, 10 deletions
diff --git a/util.c b/util.c
index 70ab6f1..fc9043b 100644
--- 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) {