From: Marcin Krol Date: Tue, 5 Aug 2014 15:32:41 +0000 (+0000) Subject: - upstream fix for array assembling X-Git-Tag: auto/ti/mdadm-3.3.1-2 X-Git-Url: http://git.pld-linux.org/gitweb.cgi?a=commitdiff_plain;h=3441ea1252479a6b541f460a8ca8b6abdef5d1d0;p=packages%2Fmdadm.git - upstream fix for array assembling --- diff --git a/assemble-fail-fix.patch b/assemble-fail-fix.patch new file mode 100644 index 0000000..a4282f8 --- /dev/null +++ b/assemble-fail-fix.patch @@ -0,0 +1,85 @@ +From 5141638c54535b4ac80b8481404d868a63a18ecd Mon Sep 17 00:00:00 2001 +From: NeilBrown +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 +--- + 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, "") == 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, "") == 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 +-- +2.0.3 + diff --git a/mdadm.spec b/mdadm.spec index fcdbfd7..ae70c7f 100644 --- a/mdadm.spec +++ b/mdadm.spec @@ -8,7 +8,7 @@ Summary: Tool for creating and maintaining software RAID devices Summary(pl.UTF-8): Narzędzie do tworzenia i obsługi programowych macierzy RAID Name: mdadm Version: 3.3.1 -Release: 1 +Release: 2 License: GPL v2+ Group: Base Source0: https://www.kernel.org/pub/linux/utils/raid/mdadm/%{name}-%{version}.tar.xz @@ -17,6 +17,7 @@ Source1: %{name}.init Source2: %{name}.sysconfig Source3: %{name}.cron Source4: %{name}-checkarray +Patch0: assemble-fail-fix.patch URL: https://www.kernel.org/pub/linux/utils/raid/mdadm/ BuildRequires: groff BuildRequires: rpmbuild(macros) >= 1.213 @@ -66,6 +67,7 @@ skonsolidowane na potrzeby initrd. %prep %setup -q +%patch0 -p1 %build %if %{with initrd}