summaryrefslogtreecommitdiffstats
path: root/monitor.c
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2008-07-12 20:27:40 +1000
committerNeil Brown <neilb@suse.de>2008-07-12 20:27:40 +1000
commit4d43913ce07ffbcb1ae8e7bdd06a4bd67cd07791 (patch)
treecc1f8daee6e0817a778fbaa1064b2afad50351a7 /monitor.c
parent2f64e61a507ee4c1a8e2fcdbc2ce0ec89fcb7902 (diff)
downloadmdadm-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.c37
1 files changed, 10 insertions, 27 deletions
diff --git a/monitor.c b/monitor.c
index 0d85d32..524411e 100644
--- a/monitor.c
+++ b/monitor.c
@@ -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);
}