diff options
author | Neil Brown <neilb@suse.de> | 2006-03-28 06:26:53 +0000 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2006-03-28 06:26:53 +0000 |
commit | 16c6fa807c1e43a1a12bbeb7668b4166d14b2cc8 (patch) | |
tree | 903679d6d0832899f1b36279bcb66e75b1e4c98f /util.c | |
parent | 8352ab3e2cd6f892ca53cd4e276c11017f6a4bdf (diff) | |
download | mdadm-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.c | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -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); |