summaryrefslogtreecommitdiffstats
path: root/util.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2008-07-18 16:37:11 +1000
committerNeilBrown <neilb@suse.de>2008-07-18 16:37:11 +1000
commit8850ee3e1ea01d4ded658fd83002fd93a81d6e99 (patch)
tree3f1a4dc0467a8d3bc8b94c9191b9326aeb676e69 /util.c
parentdaf7a3ce96e517360b0456c3a9cca0771b94462d (diff)
downloadmdadm-8850ee3e1ea01d4ded658fd83002fd93a81d6e99.tar.gz
mdadm-8850ee3e1ea01d4ded658fd83002fd93a81d6e99.tar.xz
mdadm-8850ee3e1ea01d4ded658fd83002fd93a81d6e99.zip
Factor common code into new "start_mdmon".
Signed-off-by: Neil Brown <neilb@suse.de>
Diffstat (limited to 'util.c')
-rw-r--r--util.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/util.c b/util.c
index 283eeb6..da61a0b 100644
--- a/util.c
+++ b/util.c
@@ -1074,6 +1074,31 @@ int signal_mdmon(int devnum)
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)
{
char *val = getenv("MDADM_NO_MDMON");