From: NeilBrown Date: Mon, 5 Aug 2013 04:55:13 +0000 (+1000) Subject: test: ensure testing uses correct mdmon X-Git-Tag: mdadm-3.3~35 X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fmdadm.git;a=commitdiff_plain;h=9540cc244dfc56d40f686d8f63aa5b6d73663bcf;hp=4389b648bb9dc8ab61ce8777654d59634dafc737 test: ensure testing uses correct mdmon When testing we want to run mdmon directly, not use systemctl to get systemd to run it. So allow an environment variable to make that choice. Signed-off-by: NeilBrown --- diff --git a/test b/test index 9e140f0a..8e8d1df3 100755 --- a/test +++ b/test @@ -30,6 +30,9 @@ if grep -s 'Personalities : .*multipath' > /dev/null /proc/mdstat ; then fi INTEGRITY=yes +# make sure to test local mdmon, not system one +export MDADM_NO_SYSTEMCTL=1 + # assume md0, md1, md2 exist in /dev md0=/dev/md0 md1=/dev/md1 md2=/dev/md2 mdp0=/dev/md_d0 diff --git a/util.c b/util.c index aa2c8be8..e7e3d488 100644 --- a/util.c +++ b/util.c @@ -1711,36 +1711,39 @@ int start_mdmon(char *devnm) pathbuf[0] = '\0'; /* First try to run systemctl */ - switch(fork()) { - case 0: - /* FIXME yuk. CLOSE_EXEC?? */ - skipped = 0; - for (i = 3; skipped < 20; i++) - if (close(i) < 0) - skipped++; - else - skipped = 0; - - /* Don't want to see error messages from systemctl. - * If the service doesn't exist, we start mdmon ourselves. - */ - close(2); - open("/dev/null", O_WRONLY); - snprintf(pathbuf, sizeof(pathbuf), "mdmon@%s.service", - devnm); - status = execl("/usr/bin/systemctl", "systemctl", "start", - pathbuf, NULL); - status = execl("/bin/systemctl", "systemctl", "start", - pathbuf, NULL); - exit(1); - case -1: pr_err("cannot run mdmon. " - "Array remains readonly\n"); - return -1; - default: /* parent - good */ - pid = wait(&status); - if (pid >= 0 && status == 0) - return 0; - } + if (!check_env("MDADM_NO_SYSTEMCTL")) + switch(fork()) { + case 0: + /* FIXME yuk. CLOSE_EXEC?? */ + skipped = 0; + for (i = 3; skipped < 20; i++) + if (close(i) < 0) + skipped++; + else + skipped = 0; + + /* Don't want to see error messages from + * systemctl. If the service doesn't exist, + * we start mdmon ourselves. + */ + close(2); + open("/dev/null", O_WRONLY); + snprintf(pathbuf, sizeof(pathbuf), "mdmon@%s.service", + devnm); + status = execl("/usr/bin/systemctl", "systemctl", + "start", + pathbuf, NULL); + status = execl("/bin/systemctl", "systemctl", "start", + pathbuf, NULL); + exit(1); + case -1: pr_err("cannot run mdmon. " + "Array remains readonly\n"); + return -1; + default: /* parent - good */ + pid = wait(&status); + if (pid >= 0 && status == 0) + return 0; + } /* That failed, try running mdmon directly */ switch(fork()) {