mdmon: don't lie to systemd.
Now that mdmon responds fairly well to SIGTERM, stop lying to systemd about being started on the initrd. Note that if mdmon is rerun (--takeover) for some reason, and systemd chooses to kill processes before remounting / readonly, then the unmount will hang. If systemd ever lets us tell it that we don't want to be killed until root is readonly, then we should do that. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
2ef219630b
commit
a9c1584757
2
mdadm.h
2
mdadm.h
|
@ -1390,6 +1390,8 @@ extern void fmt_devname(char *name, int num);
|
||||||
extern char *stat2devnm(struct stat *st);
|
extern char *stat2devnm(struct stat *st);
|
||||||
extern char *fd2devnm(int fd);
|
extern char *fd2devnm(int fd);
|
||||||
|
|
||||||
|
extern int in_initrd(void);
|
||||||
|
|
||||||
#define _ROUND_UP(val, base) (((val) + (base) - 1) & ~(base - 1))
|
#define _ROUND_UP(val, base) (((val) + (base) - 1) & ~(base - 1))
|
||||||
#define ROUND_UP(val, base) _ROUND_UP(val, (typeof(val))(base))
|
#define ROUND_UP(val, base) _ROUND_UP(val, (typeof(val))(base))
|
||||||
#define ROUND_UP_PTR(ptr, base) ((typeof(ptr)) \
|
#define ROUND_UP_PTR(ptr, base) ((typeof(ptr)) \
|
||||||
|
|
12
mdmon.c
12
mdmon.c
|
@ -298,10 +298,14 @@ int main(int argc, char *argv[])
|
||||||
{NULL, 0, NULL, 0}
|
{NULL, 0, NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
if (in_initrd()) {
|
||||||
* Always change process name to @dmon to avoid systemd killing it
|
/*
|
||||||
*/
|
* set first char of argv[0] to @. This is used by
|
||||||
argv[0][0] = '@';
|
* systemd to signal that the task was launched from
|
||||||
|
* initrd/initramfs and should be preserved during shutdown
|
||||||
|
*/
|
||||||
|
argv[0][0] = '@';
|
||||||
|
}
|
||||||
|
|
||||||
while ((opt = getopt_long(argc, argv, "thaF", options, NULL)) != -1) {
|
while ((opt = getopt_long(argc, argv, "thaF", options, NULL)) != -1) {
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
|
|
11
util.c
11
util.c
|
@ -29,6 +29,8 @@
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
#include <sys/un.h>
|
#include <sys/un.h>
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
|
#include <sys/vfs.h>
|
||||||
|
#include <linux/magic.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
@ -1937,3 +1939,12 @@ void enable_fds(int devices)
|
||||||
lim.rlim_cur = fds;
|
lim.rlim_cur = fds;
|
||||||
setrlimit(RLIMIT_NOFILE, &lim);
|
setrlimit(RLIMIT_NOFILE, &lim);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int in_initrd(void)
|
||||||
|
{
|
||||||
|
/* This is based on similar function in systemd. */
|
||||||
|
struct statfs s;
|
||||||
|
return statfs("/", &s) >= 0 &&
|
||||||
|
(s.f_type == TMPFS_MAGIC ||
|
||||||
|
s.f_type == RAMFS_MAGIC);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue