mkrupcale / rpms / mdadm

Forked from rpms/mdadm 5 years ago
Clone
Blob Blame History Raw
From 5141638c54535b4ac80b8481404d868a63a18ecd Mon Sep 17 00:00:00 2001
From: NeilBrown <neilb@suse.de>
Date: Tue, 29 Jul 2014 13:48:23 +1000
Subject: [PATCH] Assemble: Only fail auto-assemble in face of mdadm.conf
 conflicts.

We should never auto-assemble things that conflict with mdadm.conf
However explicit assembly requests should be allowed.

Reported-by: olovopb
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1070245
Signed-off-by: NeilBrown <neilb@suse.de>
---
 Assemble.c | 47 ++++++++++++++++++++++++++---------------------
 1 file changed, 26 insertions(+), 21 deletions(-)

diff --git a/Assemble.c b/Assemble.c
index aca28be..cdcdb0f 100644
--- a/Assemble.c
+++ b/Assemble.c
@@ -366,9 +366,6 @@ static int select_devices(struct mddev_dev *devlist,
 			tmpdev = NULL;
 			goto loop;
 		} else {
-			int rv = 0;
-			struct mddev_ident *match;
-
 			content = *contentp;
 			tst->ss->getinfo_super(tst, content, NULL);
 
@@ -377,25 +374,33 @@ static int select_devices(struct mddev_dev *devlist,
 					   report_mismatch ? devname : NULL))
 				goto loop;
 
-			match = conf_match(tst, content, devname,
-					   report_mismatch ? c->verbose : -1,
-					   &rv);
-			if (!match && rv == 2)
-				goto loop;
-			if (match && match->devname &&
-			    strcasecmp(match->devname, "<ignore>") == 0) {
-				if (report_mismatch)
-					pr_err("%s is a member of an explicitly ignored array\n",
-					       devname);
-				goto loop;
-			}
-			if (match && !ident_matches(match, content, tst,
-						    c->homehost, c->update,
-						    report_mismatch ? devname : NULL))
-				/* Array exists  in mdadm.conf but some
-				 * details don't match, so reject it
+			if (auto_assem) {
+				/* Never auto-assemble things that conflict
+				 * with mdadm.conf in some way
 				 */
-				goto loop;
+				struct mddev_ident *match;
+				int rv = 0;
+
+				match = conf_match(tst, content, devname,
+						   report_mismatch ? c->verbose : -1,
+						   &rv);
+				if (!match && rv == 2)
+					goto loop;
+				if (match && match->devname &&
+				    strcasecmp(match->devname, "<ignore>") == 0) {
+					if (report_mismatch)
+						pr_err("%s is a member of an explicitly ignored array\n",
+						       devname);
+					goto loop;
+				}
+				if (match && !ident_matches(match, content, tst,
+							    c->homehost, c->update,
+							    report_mismatch ? devname : NULL))
+					/* Array exists  in mdadm.conf but some
+					 * details don't match, so reject it
+					 */
+					goto loop;
+			}
 
 			/* should be safe to try an exclusive open now, we
 			 * have rejected anything that some other mdadm might
-- 
1.9.3