From 24f6f99b3630b1a89aaa57930c5c9de8a3df9ded Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Thu, 4 Feb 2010 16:47:21 +1100 Subject: [PATCH 1/1] Having single function to read mdmon pid file. We don't need three. One (signal_mdmon) wasn't even being used. Signed-off-by: NeilBrown --- mdadm.h | 2 +- mdmon.c | 24 +++--------------------- util.c | 26 +++++++------------------- 3 files changed, 11 insertions(+), 41 deletions(-) diff --git a/mdadm.h b/mdadm.h index 836c64d8..eec5c0c8 100644 --- a/mdadm.h +++ b/mdadm.h @@ -883,7 +883,7 @@ extern int open_mddev(char *dev, int report_errors); extern int open_container(int fd); extern int mdmon_running(int devnum); -extern int signal_mdmon(int devnum); +extern int mdmon_pid(int devnum); extern int check_env(char *name); extern __u32 random32(void); extern int start_mdmon(int devnum); diff --git a/mdmon.c b/mdmon.c index 1cdbde1d..d20bb3e4 100644 --- a/mdmon.c +++ b/mdmon.c @@ -148,24 +148,6 @@ int is_container_member(struct mdstat_ent *mdstat, char *container) return 1; } -pid_t devname2mdmon(char *devname) -{ - char buf[100]; - pid_t pid = -1; - int fd; - - sprintf(buf, "/var/run/mdadm/%s.pid", devname); - fd = open(buf, O_RDONLY|O_NOATIME); - if (fd < 0) - return -1; - - if (read(fd, buf, sizeof(buf)) > 0) - sscanf(buf, "%d\n", &pid); - close(fd); - - return pid; -} - static void try_kill_monitor(pid_t pid, char *devname, int sock) { char buf[100]; @@ -373,7 +355,7 @@ static int mdmon(char *devname, int devnum, int must_fork, char *switchroot) switch (fork()) { case 0: - victim = devname2mdmon(devname); + victim = mdmon_pid(devnum); victim_sock = connect_monitor(devname); if (chroot(switchroot) != 0) { fprintf(stderr, "mdmon: failed to chroot to '%s': %s\n", @@ -511,7 +493,7 @@ static int mdmon(char *devname, int devnum, int must_fork, char *switchroot) * the new root */ if (switchroot[0] == '/') { - victim = devname2mdmon(container->devname); + victim = mdmon_pid(container->devnum); victim_sock = connect_monitor(container->devname); } else { victim = atoi(switchroot); @@ -527,7 +509,7 @@ static int mdmon(char *devname, int devnum, int must_fork, char *switchroot) exit(3); } /* if there is a pid file, kill whoever is there just in case */ - victim = devname2mdmon(container->devname); + victim = mdmon_pid(container->devnum); } if (container->ss->load_super(container, mdfd, devname)) { fprintf(stderr, "mdmon: Cannot load metadata for %s\n", diff --git a/util.c b/util.c index 5feec43b..e5b0c1f5 100644 --- a/util.c +++ b/util.c @@ -1463,14 +1463,14 @@ int fd2devnum(int fd) return NoMdDev; } -int mdmon_running(int devnum) +int mdmon_pid(int devnum) { char path[100]; char pid[10]; int fd; int n; sprintf(path, "/var/run/mdadm/%s.pid", devnum2devname(devnum)); - fd = open(path, O_RDONLY, 0); + fd = open(path, O_RDONLY | O_NOATIME, 0); if (fd < 0) return 0; @@ -1478,27 +1478,15 @@ int mdmon_running(int devnum) close(fd); if (n <= 0) return 0; - if (kill(atoi(pid), 0) == 0) - return 1; - return 0; + return atoi(pid); } -int signal_mdmon(int devnum) +int mdmon_running(int devnum) { - char path[100]; - char pid[10]; - int fd; - int n; - sprintf(path, "/var/run/mdadm/%s.pid", devnum2devname(devnum)); - fd = open(path, O_RDONLY, 0); - - if (fd < 0) - return 0; - n = read(fd, pid, 9); - close(fd); - if (n <= 0) + int pid = mdmon_pid(devnum); + if (pid <= 0) return 0; - if (kill(atoi(pid), SIGUSR1) == 0) + if (kill(pid, 0) == 0) return 1; return 0; } -- 2.39.2