mdmon: add --foreground option

While not strictly necessary for systemd, it is cleaner to avoid
forking when running from a management daemon.  So add a --foreground
option to mdmon.

Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
NeilBrown 2013-02-05 15:57:09 +11:00
parent 15c10423aa
commit 030419821f
3 changed files with 17 additions and 4 deletions

10
mdmon.8
View File

@ -5,7 +5,7 @@ mdmon \- monitor MD external metadata arrays
.SH SYNOPSIS .SH SYNOPSIS
.BI mdmon " [--all] [--takeover] CONTAINER" .BI mdmon " [--all] [--takeover] [--foreground] CONTAINER"
.SH OVERVIEW .SH OVERVIEW
The 2.6.27 kernel brings the ability to support external metadata arrays. The 2.6.27 kernel brings the ability to support external metadata arrays.
@ -131,6 +131,14 @@ The
device to monitor. It can be a full path like /dev/md/container, or a device to monitor. It can be a full path like /dev/md/container, or a
simple md device name like md127. simple md device name like md127.
.TP .TP
.B \-\-foreground
Normally,
.I mdmon
will fork and continue in the background. Adding this option will
skip that step and run
.I mdmon
in the foreground.
.TP
.B \-\-takeover .B \-\-takeover
This instructs This instructs
.I mdmon .I mdmon

View File

@ -288,11 +288,13 @@ int main(int argc, char *argv[])
int opt; int opt;
int all = 0; int all = 0;
int takeover = 0; int takeover = 0;
int dofork = 1;
static struct option options[] = { static struct option options[] = {
{"all", 0, NULL, 'a'}, {"all", 0, NULL, 'a'},
{"takeover", 0, NULL, 't'}, {"takeover", 0, NULL, 't'},
{"help", 0, NULL, 'h'}, {"help", 0, NULL, 'h'},
{"offroot", 0, NULL, OffRootOpt}, {"offroot", 0, NULL, OffRootOpt},
{"foreground", 0, NULL, 'F'},
{NULL, 0, NULL, 0} {NULL, 0, NULL, 0}
}; };
@ -301,7 +303,7 @@ int main(int argc, char *argv[])
*/ */
argv[0][0] = '@'; argv[0][0] = '@';
while ((opt = getopt_long(argc, argv, "tha", options, NULL)) != -1) { while ((opt = getopt_long(argc, argv, "thaF", options, NULL)) != -1) {
switch (opt) { switch (opt) {
case 'a': case 'a':
container_name = argv[optind-1]; container_name = argv[optind-1];
@ -310,6 +312,9 @@ int main(int argc, char *argv[])
case 't': case 't':
takeover = 1; takeover = 1;
break; break;
case 'F':
dofork = 0;
break;
case OffRootOpt: case OffRootOpt:
/* silently ignore old option */ /* silently ignore old option */
break; break;
@ -381,7 +386,7 @@ int main(int argc, char *argv[])
container_name); container_name);
exit(1); exit(1);
} }
return mdmon(devname, devnum, do_fork(), takeover); return mdmon(devname, devnum, dofork && do_fork(), takeover);
} }
static int mdmon(char *devname, int devnum, int must_fork, int takeover) static int mdmon(char *devname, int devnum, int must_fork, int takeover)

View File

@ -11,7 +11,7 @@ DefaultDependencies=no
Before=initrd-switch-root.target Before=initrd-switch-root.target
[Service] [Service]
ExecStart=/sbin/mdmon %I ExecStart=/sbin/mdmon --foreground %I
StandardInput=null StandardInput=null
StandardOutput=null StandardOutput=null
StandardError=null StandardError=null