diff options
author | Neil Brown <neilb@suse.de> | 2008-07-12 20:27:40 +1000 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2008-07-12 20:27:40 +1000 |
commit | 4d43913ce07ffbcb1ae8e7bdd06a4bd67cd07791 (patch) | |
tree | cc1f8daee6e0817a778fbaa1064b2afad50351a7 /monitor.c | |
parent | 2f64e61a507ee4c1a8e2fcdbc2ce0ec89fcb7902 (diff) | |
download | mdadm-4d43913ce07ffbcb1ae8e7bdd06a4bd67cd07791.tar.gz mdadm-4d43913ce07ffbcb1ae8e7bdd06a4bd67cd07791.tar.xz mdadm-4d43913ce07ffbcb1ae8e7bdd06a4bd67cd07791.zip |
Remove mgr_pipe for communicating from manage to monitor.
Data is being passed in shared memory, so the pipe is only being
use as a wakeup. This can more easily be done with a thread-signal.
Diffstat (limited to 'monitor.c')
-rw-r--r-- | monitor.c | 37 |
1 files changed, 10 insertions, 27 deletions
@@ -1,7 +1,7 @@ #include "mdadm.h" #include "mdmon.h" - +#include <sys/syscall.h> #include <sys/select.h> #include <signal.h> @@ -138,7 +138,9 @@ int read_dev_state(int fd) static void signal_manager(void) { - kill(getpid(), SIGUSR1); + /* tgkill(getpid(), mon_tid, SIGUSR1); */ + int pid = getpid(); + syscall(SYS_tgkill, pid, mgr_tid, SIGUSR1); } /* Monitor a set of active md arrays - all of which share the @@ -367,16 +369,6 @@ static void reconcile_failed(struct active_array *aa, struct mdinfo *failed) } } -static int handle_pipe(struct md_generic_cmd *cmd, struct active_array *aa) -{ - switch (cmd->action) { - case md_action_ping_monitor: - return 0; - } - - return -1; -} - #ifdef DEBUG static void dprint_wake_reasons(fd_set *fds) { @@ -407,8 +399,7 @@ static void dprint_wake_reasons(fd_set *fds) } #endif -static int wait_and_act(struct supertype *container, int pfd, - int nowait) +static int wait_and_act(struct supertype *container, int nowait) { fd_set rfds; int maxfd = 0; @@ -419,7 +410,6 @@ static int wait_and_act(struct supertype *container, int pfd, FD_ZERO(&rfds); - add_fd(&rfds, &maxfd, pfd); for (ap = aap ; *ap ;) { a = *ap; /* once an array has been deactivated we want to @@ -463,21 +453,15 @@ static int wait_and_act(struct supertype *container, int pfd, } if (!nowait) { - rv = select(maxfd+1, &rfds, NULL, NULL, NULL); + sigset_t set; + sigprocmask(SIG_UNBLOCK, NULL, &set); + sigdelset(&set, SIGUSR1); + rv = pselect(maxfd+1, &rfds, NULL, NULL, NULL, &set); #ifdef DEBUG dprint_wake_reasons(&rfds); #endif - if (rv <= 0) - return rv; - - if (FD_ISSET(pfd, &rfds)) { - int err = -1; - - if (read(pfd, &err, 1) > 0) - err = handle_pipe(active_cmd, *aap); - } } if (update_queue) { @@ -526,8 +510,7 @@ void do_monitor(struct supertype *container) int rv; int first = 1; do { - rv = wait_and_act(container, container->mgr_pipe[0], - first); + rv = wait_and_act(container, first); first = 0; } while (rv >= 0); } |