summaryrefslogtreecommitdiffstats
path: root/util.c
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2006-03-28 06:26:53 +0000
committerNeil Brown <neilb@suse.de>2006-03-28 06:26:53 +0000
commit16c6fa807c1e43a1a12bbeb7668b4166d14b2cc8 (patch)
tree903679d6d0832899f1b36279bcb66e75b1e4c98f /util.c
parent8352ab3e2cd6f892ca53cd4e276c11017f6a4bdf (diff)
downloadmdadm-16c6fa807c1e43a1a12bbeb7668b4166d14b2cc8.tar.gz
mdadm-16c6fa807c1e43a1a12bbeb7668b4166d14b2cc8.tar.xz
mdadm-16c6fa807c1e43a1a12bbeb7668b4166d14b2cc8.zip
Create missing /dev files where needed.
Whenever we need a device file to open, if one cannot be found in /dev, create a temporary one. Signed-off-by: Neil Brown <neilb@suse.de>
Diffstat (limited to 'util.c')
-rw-r--r--util.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/util.c b/util.c
index ab606ab..873deba 100644
--- a/util.c
+++ b/util.c
@@ -358,7 +358,7 @@ int devlist_ready = 0;
int add_dev(const char *name, const struct stat *stb, int flag, struct FTW *s)
{
}
-char *map_dev(int major, int minor)
+char *map_dev(int major, int minor, int create)
{
#if 0
fprintf(stderr, "Warning - fail to map %d,%d to a device name\n",
@@ -404,7 +404,7 @@ int add_dev(const char *name, const struct stat *stb, int flag, struct FTW *s)
* deliberately so prefer it over a standard name.
* This applies only to names for MD devices.
*/
-char *map_dev(int major, int minor)
+char *map_dev(int major, int minor, int create)
{
struct devmap *p;
char *std = NULL, *nonstd=NULL;
@@ -431,6 +431,12 @@ char *map_dev(int major, int minor)
nonstd = p->name;
}
}
+ if (create && !std && !nonstd) {
+ static char buf[30];
+ snprintf(buf, 1024, "%d:%d", major, minor);
+ nonstd = buf;
+ }
+
return nonstd ? nonstd : std;
}
@@ -573,7 +579,7 @@ char *get_md_name(int dev)
&& (stb.st_rdev == rdev))
return devname;
}
- dn = map_dev(major(rdev), minor(rdev));
+ dn = map_dev(major(rdev), minor(rdev), 0);
if (dn)
return dn;
snprintf(devname, sizeof(devname), "/dev/.tmp.md%d", dev);