From 331d4d2a33e5213ed3e149b68bf38b2dc8d83494 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Tue, 14 Jun 2005 00:15:04 +0000 Subject: Add device files created with --auto to list of known device files. Description... Signed-off-by: Neil Brown --- ChangeLog | 3 +++ mdadm.h | 13 +++++++++++++ mdopen.c | 4 ++++ util.c | 23 +++++++++++++---------- 4 files changed, 33 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index fbde4ec..42d7069 100644 --- a/ChangeLog +++ b/ChangeLog @@ -22,6 +22,9 @@ Changes Prior to 1.12.0 release stable aspect of the array - Allow --force with --grow so '-Gfn1' works (on raid1) - Make --examine --brief report spares= properly. + - When device files are made with "--assemble --auto", + add them to the list of known device name, so that + assembling stacked devices has a better chance of working. Changes Prior to 1.11.0 release - Fix embarassing bug which causes --add to always fail. diff --git a/mdadm.h b/mdadm.h index 8542f57..d8a36a4 100644 --- a/mdadm.h +++ b/mdadm.h @@ -154,6 +154,19 @@ extern mapping_t r5layout[], pers[], modes[], faultylayout[]; extern char *map_dev(int major, int minor); +#ifdef UCLIBC + struct FTW {}; +# define FTW_PHYS 1 +#else +# define __USE_XOPEN_EXTENDED +# include +# 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); diff --git a/mdopen.c b/mdopen.c index 721d74a..9309fbd 100644 --- a/mdopen.c +++ b/mdopen.c @@ -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); } } diff --git a/util.c b/util.c index a7dc7c7..e5b7256 100644 --- a/util.c +++ b/util.c @@ -443,6 +443,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 @@ -452,15 +455,19 @@ char *map_dev(int major, int minor) return NULL; } #else -#define __USE_XOPEN_EXTENDED -#include +#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 -#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) -#endif { if ((stb->st_mode&S_IFMT)== S_IFBLK) { char *n = strdup(name); @@ -488,11 +495,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; } -- cgit