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 <neilb@suse.de>
This commit is contained in:
NeilBrown 2010-02-04 16:47:21 +11:00
parent 24cfdbc5c0
commit 24f6f99b36
3 changed files with 11 additions and 41 deletions

View File

@ -883,7 +883,7 @@ extern int open_mddev(char *dev, int report_errors);
extern int open_container(int fd); extern int open_container(int fd);
extern int mdmon_running(int devnum); 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 int check_env(char *name);
extern __u32 random32(void); extern __u32 random32(void);
extern int start_mdmon(int devnum); extern int start_mdmon(int devnum);

24
mdmon.c
View File

@ -148,24 +148,6 @@ int is_container_member(struct mdstat_ent *mdstat, char *container)
return 1; 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) static void try_kill_monitor(pid_t pid, char *devname, int sock)
{ {
char buf[100]; char buf[100];
@ -373,7 +355,7 @@ static int mdmon(char *devname, int devnum, int must_fork, char *switchroot)
switch (fork()) { switch (fork()) {
case 0: case 0:
victim = devname2mdmon(devname); victim = mdmon_pid(devnum);
victim_sock = connect_monitor(devname); victim_sock = connect_monitor(devname);
if (chroot(switchroot) != 0) { if (chroot(switchroot) != 0) {
fprintf(stderr, "mdmon: failed to chroot to '%s': %s\n", 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 * the new root
*/ */
if (switchroot[0] == '/') { if (switchroot[0] == '/') {
victim = devname2mdmon(container->devname); victim = mdmon_pid(container->devnum);
victim_sock = connect_monitor(container->devname); victim_sock = connect_monitor(container->devname);
} else { } else {
victim = atoi(switchroot); victim = atoi(switchroot);
@ -527,7 +509,7 @@ static int mdmon(char *devname, int devnum, int must_fork, char *switchroot)
exit(3); exit(3);
} }
/* if there is a pid file, kill whoever is there just in case */ /* 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)) { if (container->ss->load_super(container, mdfd, devname)) {
fprintf(stderr, "mdmon: Cannot load metadata for %s\n", fprintf(stderr, "mdmon: Cannot load metadata for %s\n",

26
util.c
View File

@ -1463,14 +1463,14 @@ int fd2devnum(int fd)
return NoMdDev; return NoMdDev;
} }
int mdmon_running(int devnum) int mdmon_pid(int devnum)
{ {
char path[100]; char path[100];
char pid[10]; char pid[10];
int fd; int fd;
int n; int n;
sprintf(path, "/var/run/mdadm/%s.pid", devnum2devname(devnum)); 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) if (fd < 0)
return 0; return 0;
@ -1478,27 +1478,15 @@ int mdmon_running(int devnum)
close(fd); close(fd);
if (n <= 0) if (n <= 0)
return 0; return 0;
if (kill(atoi(pid), 0) == 0) return atoi(pid);
return 1;
return 0;
} }
int signal_mdmon(int devnum) int mdmon_running(int devnum)
{ {
char path[100]; int pid = mdmon_pid(devnum);
char pid[10]; if (pid <= 0)
int fd;
int n;
sprintf(path, "/var/run/mdadm/%s.pid", devnum2devname(devnum));
fd = open(path, O_RDONLY, 0);
if (fd < 0)
return 0; return 0;
n = read(fd, pid, 9); if (kill(pid, 0) == 0)
close(fd);
if (n <= 0)
return 0;
if (kill(atoi(pid), SIGUSR1) == 0)
return 1; return 1;
return 0; return 0;
} }