Add device files created with --auto to list of known device files.

Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
This commit is contained in:
Neil Brown 2005-06-14 06:37:57 +00:00
parent bd72c2b2b8
commit 173fc51539
3 changed files with 31 additions and 11 deletions

13
mdadm.h
View File

@ -200,6 +200,19 @@ struct supertype {
extern struct supertype *super_by_version(int vers, int minor);
extern struct supertype *guess_super(int fd);
#ifdef UCLIBC
struct FTW {};
# define FTW_PHYS 1
#else
# define __USE_XOPEN_EXTENDED
# include <ftw.h>
# ifdef __dietlibc__
# define FTW_PHYS 1
# endif
#endif
extern int add_dev(const char *name, const struct stat *stb, int flag, struct FTW *s);
extern int Manage_ro(char *devname, int fd, int readonly);
extern int Manage_runstop(char *devname, int fd, int runstop, int quiet);

View File

@ -66,6 +66,8 @@ void make_parts(char *dev, int cnt)
mknod(name, S_IFBLK | 0600, makedev(major, minor+i));
chown(name, stb2.st_uid, stb2.st_gid);
chmod(name, stb2.st_mode & 07777);
stat(name, &stb2);
add_dev(name, &stb2, 0, NULL);
}
}
@ -205,6 +207,8 @@ int open_mddev(char *dev, int autof)
chown(dev, stb.st_uid, stb.st_gid);
chmod(dev, stb.st_mode & 07777);
}
stat(dev, &stb);
add_dev(dev, &stb, 0, NULL);
make_parts(dev,autof);
}
}

25
util.c
View File

@ -313,6 +313,9 @@ struct devmap {
int devlist_ready = 0;
#ifdef UCLIBC
int add_dev(const char *name, const struct stat *stb, int flag, struct FTW *s)
{
}
char *map_dev(int major, int minor)
{
#if 0
@ -322,15 +325,19 @@ char *map_dev(int major, int minor)
return NULL;
}
#else
#define __USE_XOPEN_EXTENDED
#include <ftw.h>
#ifndef __dietlibc__
int add_dev(const char *name, const struct stat *stb, int flag, struct FTW *s)
#else
int add_dev(const char *name, const struct stat *stb, int flag)
#ifdef __dietlibc__
int add_dev_1(const char *name, const struct stat *stb, int flag)
{
return add_dev(name, stb, flag, NULL);
}
int nftw(const char *path, int (*han)(const char *name, const struct stat *stb, int flag, struct FTW *s), int nopenfd, int flags)
{
ftw(path, add_dev_1, nopenfd);
}
#endif
int add_dev(const char *name, const struct stat *stb, int flag, struct FTW *s)
{
if ((stb->st_mode&S_IFMT)== S_IFBLK) {
char *n = strdup(name);
@ -358,11 +365,7 @@ char *map_dev(int major, int minor)
struct devmap *p;
char *std = NULL, *nonstd=NULL;
if (!devlist_ready) {
#ifndef __dietlibc__
nftw("/dev", add_dev, 10, FTW_PHYS);
#else
ftw("/dev", add_dev, 10);
#endif
devlist_ready=1;
}