diff --git a/0207-managemon-Don-t-add-disk-to-the-array-after-it-has-s.patch b/0207-managemon-Don-t-add-disk-to-the-array-after-it-has-s.patch new file mode 100644 index 0000000..cf4ea2f --- /dev/null +++ b/0207-managemon-Don-t-add-disk-to-the-array-after-it-has-s.patch @@ -0,0 +1,70 @@ +From a44c262abc49b3c69ee80c97813388e5d021d20b Mon Sep 17 00:00:00 2001 +From: Tomasz Majchrzak +Date: Thu, 7 Dec 2017 10:23:54 +0100 +Subject: [PATCH] managemon: Don't add disk to the array after it has started +Git-commit: a44c262abc49b3c69ee80c97813388e5d021d20b +Patched-mainline: mdadm-4.0+ +References: bsc#1073862 + +If disk has disappeared from the system and appears again, it is added to the +corresponding container as long the metadata matches and disk number is set. +This code had no effect on imsm until commit 20dc76d15b40 ("imsm: Set disk slot +number"). Now the disk is added to container but not to the array - it is +correct as the disk is out-of-sync. Rebuild should start for the disk but it +doesn't. There is the same behaviour for both imsm and ddf metadata. + +There is no point to handle out-of-sync disk as "good member of array" so +remove that part of code. There are no scenarios when monitor is already +running and disk can be safely added to the array. Just write initial metadata +to the disk so it's taken for rebuild. + +Signed-off-by: Tomasz Majchrzak +Signed-off-by: Jes Sorensen +Signed-off-by: Coly Li +--- + managemon.c | 21 --------------------- + 1 file changed, 21 deletions(-) + +diff --git a/managemon.c b/managemon.c +index 4e85398..101231c 100644 +--- a/managemon.c ++++ b/managemon.c +@@ -266,9 +266,7 @@ static void add_disk_to_container(struct supertype *st, struct mdinfo *sd) + { + int dfd; + char nm[20]; +- struct supertype *st2; + struct metadata_update *update = NULL; +- struct mdinfo info; + mdu_disk_info_t dk = { + .number = -1, + .major = sd->disk.major, +@@ -287,25 +285,6 @@ static void add_disk_to_container(struct supertype *st, struct mdinfo *sd) + if (dfd < 0) + return; + +- /* Check the metadata and see if it is already part of this +- * array +- */ +- st2 = dup_super(st); +- if (st2->ss->load_super(st2, dfd, NULL) == 0) { +- st2->ss->getinfo_super(st2, &info, NULL); +- if (st->ss->compare_super(st, st2) == 0 && +- info.disk.raid_disk >= 0) { +- /* Looks like a good member of array. +- * Just accept it. +- * mdadm will incorporate any parts into +- * active arrays. +- */ +- st2->ss->free_super(st2); +- return; +- } +- } +- st2->ss->free_super(st2); +- + st->update_tail = &update; + st->ss->add_to_super(st, &dk, dfd, NULL, INVALID_SECTORS); + st->ss->write_init_super(st); +-- +2.15.1 + diff --git a/mdadm.changes b/mdadm.changes index afd3967..eaf6bb1 100644 --- a/mdadm.changes +++ b/mdadm.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Wed Jan 3 14:44:06 UTC 2018 - colyli@suse.com + +- 0207-managemon-Don-t-add-disk-to-the-array-after-it-has-s.patch + (bsc#1073862) + ------------------------------------------------------------------- Mon Dec 4 17:11:14 UTC 2017 - colyli@suse.com diff --git a/mdadm.spec b/mdadm.spec index de8f57d..a3bfe30 100644 --- a/mdadm.spec +++ b/mdadm.spec @@ -1,7 +1,7 @@ # # spec file for package mdadm # -# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -249,6 +249,7 @@ Patch203: 0203-imsm-More-precise-message-when-spanned-raid-is-creat.patch Patch204: 0204-sysfs-include-faulty-drive-in-disk-count.patch Patch205: 0205-Monitor-msg-Don-t-print-error-message-if-mdmon-doesn.patch Patch206: 0206-imsm-continue-resync-on-3-disk-RAID10.patch +Patch207: 0207-managemon-Don-t-add-disk-to-the-array-after-it-has-s.patch %define _udevdir %(pkg-config --variable=udevdir udev) %define _systemdshutdowndir %{_unitdir}/../system-shutdown @@ -465,6 +466,7 @@ programs but with a very different interface. %patch204 -p1 %patch205 -p1 %patch206 -p1 +%patch207 -p1 %build make %{?_smp_mflags} CC="%__cc" CXFLAGS="$RPM_OPT_FLAGS -Wno-error" SUSE=yes