Factor common code into new "start_mdmon".
Signed-off-by: Neil Brown <neilb@suse.de>
This commit is contained in:
parent
daf7a3ce96
commit
8850ee3e1e
26
Create.c
26
Create.c
|
@ -769,28 +769,10 @@ int Create(struct supertype *st, char *mddev, int mdfd,
|
||||||
if (verbose >= 0)
|
if (verbose >= 0)
|
||||||
fprintf(stderr, Name ": array %s started.\n", mddev);
|
fprintf(stderr, Name ": array %s started.\n", mddev);
|
||||||
if (st->ss->external && st->subarray[0]) {
|
if (st->ss->external && st->subarray[0]) {
|
||||||
if (need_mdmon && !env_no_mdmon()) {
|
if (need_mdmon)
|
||||||
int dn = st->container_dev;
|
start_mdmon(st->container_dev);
|
||||||
int i;
|
|
||||||
switch(fork()) {
|
ping_monitor(devnum2devname(st->container_dev));
|
||||||
case 0:
|
|
||||||
/* FIXME yuk. CLOSE_EXEC?? */
|
|
||||||
for (i=3; i < 100; i++)
|
|
||||||
close(i);
|
|
||||||
execl("./mdmon", "mdmon",
|
|
||||||
map_dev(dev2major(dn),
|
|
||||||
dev2minor(dn),
|
|
||||||
1), NULL);
|
|
||||||
exit(1);
|
|
||||||
case -1: fprintf(stderr, Name ": cannot fork. "
|
|
||||||
"Array remains readonly\n");
|
|
||||||
return 1;
|
|
||||||
default: ; /* parent - good */
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
signal_mdmon(st->container_dev);
|
|
||||||
/* FIXME wait for mdmon to set array to read-auto */
|
|
||||||
sleep(1);
|
|
||||||
close(container_fd);
|
close(container_fd);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -836,28 +836,9 @@ int Incremental_container(struct supertype *st, char *devname, int verbose,
|
||||||
sysfs_set_str(sra, NULL, "array_state",
|
sysfs_set_str(sra, NULL, "array_state",
|
||||||
"readonly");
|
"readonly");
|
||||||
/* start mdmon if needed. */
|
/* start mdmon if needed. */
|
||||||
if (mdmon_running(st->container_dev))
|
if (!mdmon_running(st->container_dev))
|
||||||
signal_mdmon(st->container_dev);
|
start_mdmon(st->container_dev);
|
||||||
else if (!env_no_mdmon()) {
|
ping_monitor(devnum2devname(st->container_dev));
|
||||||
int dn = st->container_dev;
|
|
||||||
int i;
|
|
||||||
switch(fork()) {
|
|
||||||
case 0:
|
|
||||||
/* FIXME yuk. CLOSE_EXEC?? */
|
|
||||||
for (i=3; i < 100; i++)
|
|
||||||
close(i);
|
|
||||||
execl("./mdmon", "mdmon",
|
|
||||||
map_dev(dev2major(dn),
|
|
||||||
dev2minor(dn),
|
|
||||||
1), NULL);
|
|
||||||
exit(1);
|
|
||||||
case -1: fprintf(stderr, Name
|
|
||||||
": cannot fork. "
|
|
||||||
"Array remains readonly\n");
|
|
||||||
return 1;
|
|
||||||
default: ; /* parent - good */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (verbose >= 0)
|
if (verbose >= 0)
|
||||||
|
|
1
mdadm.h
1
mdadm.h
|
@ -774,6 +774,7 @@ extern int open_container(int fd);
|
||||||
extern int mdmon_running(int devnum);
|
extern int mdmon_running(int devnum);
|
||||||
extern int signal_mdmon(int devnum);
|
extern int signal_mdmon(int devnum);
|
||||||
extern int env_no_mdmon(void);
|
extern int env_no_mdmon(void);
|
||||||
|
extern int start_mdmon(int devnum);
|
||||||
|
|
||||||
extern char *devnum2devname(int num);
|
extern char *devnum2devname(int num);
|
||||||
extern int devname2devnum(char *name);
|
extern int devname2devnum(char *name);
|
||||||
|
|
25
util.c
25
util.c
|
@ -1074,6 +1074,31 @@ int signal_mdmon(int devnum)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int start_mdmon(int devnum)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (env_no_mdmon())
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
switch(fork()) {
|
||||||
|
case 0:
|
||||||
|
/* FIXME yuk. CLOSE_EXEC?? */
|
||||||
|
for (i=3; i < 100; i++)
|
||||||
|
close(i);
|
||||||
|
execl("./mdmon", "mdmon",
|
||||||
|
map_dev(dev2major(devnum),
|
||||||
|
dev2minor(devnum),
|
||||||
|
1), NULL);
|
||||||
|
exit(1);
|
||||||
|
case -1: fprintf(stderr, Name ": cannot run mdmon. "
|
||||||
|
"Array remains readonly\n");
|
||||||
|
return -1;
|
||||||
|
default: ; /* parent - good */
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int env_no_mdmon(void)
|
int env_no_mdmon(void)
|
||||||
{
|
{
|
||||||
char *val = getenv("MDADM_NO_MDMON");
|
char *val = getenv("MDADM_NO_MDMON");
|
||||||
|
|
Loading…
Reference in New Issue