NeilBrown: mdmon: Check both RUN directories to find running mdmon

Martin F. Krafft madduck at alioth.debian.org
Mon May 24 09:21:10 UTC 2010


Module: mdadm
Branch: upstream
Commit: 32f217017fd5343ab3c0c564b689b90d0f093bd5
URL:    http://git.debian.org/?p=pkg-mdadm/mdadm.git;a=commit;h=32f217017fd5343ab3c0c564b689b90d0f093bd5

Author: NeilBrown <neilb at suse.de>
Date:   Sun Feb 28 15:43:40 2010 +0100

mdmon: Check both RUN directories to find running mdmon

If mdmon is run without "--takeover", it should still
check both *_RUN directories for a valid 'pid' file
to guard against having two mdmons running at the same time.


Suggested-by: Luca Berra <bluca at comedia.it>
Signed-off-by: NeilBrown <neilb at suse.de>

---

 mdmon.c |   21 +++++++++------------
 1 files changed, 9 insertions(+), 12 deletions(-)

diff --git a/mdmon.c b/mdmon.c
index ef1872a..961aa77 100644
--- a/mdmon.c
+++ b/mdmon.c
@@ -445,26 +445,23 @@ static int mdmon(char *devname, int devnum, int must_fork, int takeover)
 	act.sa_handler = SIG_IGN;
 	sigaction(SIGPIPE, &act, NULL);
 
-	if (takeover) {
-		pid_dir = VAR_RUN;
+	pid_dir = VAR_RUN;
+	victim = mdmon_pid(container->devnum);
+	if (victim < 0) {
+		pid_dir = ALT_RUN;
 		victim = mdmon_pid(container->devnum);
-		if (victim < 0) {
-			pid_dir = ALT_RUN;
-			victim = mdmon_pid(container->devnum);
-		}
-		if (victim >= 0)
-			victim_sock = connect_monitor(container->devname);
 	}
+	if (victim >= 0)
+		victim_sock = connect_monitor(container->devname);
 
 	ignore = chdir("/");
-	if (victim < 0) {
-		if (ping_monitor(container->devname) == 0) {
+	if (!takeover && victim > 0 && victim_sock >= 0) {
+		if (fping_monitor(victim_sock) == 0) {
 			fprintf(stderr, "mdmon: %s already managed\n",
 				container->devname);
 			exit(3);
 		}
-		/* if there is a pid file, kill whoever is there just in case */
-		victim = mdmon_pid(container->devnum);
+		close(victim_sock);
 	}
 	if (container->ss->load_super(container, mdfd, devname)) {
 		fprintf(stderr, "mdmon: Cannot load metadata for %s\n",




More information about the pkg-mdadm-commits mailing list