From 104980a2432ef97974e2515ef23ad1a75026bd55 Mon Sep 17 00:00:00 2001 From: Xiao Ni Date: Thu, 12 Jan 2017 23:12:04 +0800 Subject: [PATCH] Update mdadm to upstream v4.0 Resolves: bz#1411555 Signed-off-by: Xiao Ni --- .gitignore | 1 + mdadm-3.2.4-map-dir.patch | 18 --- ...2.4-super1-fix-choice-of-data_offset.patch | 92 --------------- mdadm-3.2.5-Add-zlib-license-to-crc32.c.patch | 45 -------- ...e-sha1.h-with-slightly-older-version.patch | 39 ------- ...orrect-checking-volume-s-degradation.patch | 46 -------- ...ponent_size-to-manager-thread-of-mdm.patch | 49 -------- ...reate.c-check-if-freesize-is-equal-0.patch | 30 ----- ...all-flush_mdmon-if-O_EXCL-fails-on-s.patch | 54 --------- ...panning-between-multiple-controllers.patch | 73 ------------ ...not-finish-migration-if-there-are-no.patch | 49 -------- ...-3.2.6-query-udev-dir-via-pkg-config.patch | 54 --------- ...il-auto-assemble-in-face-of-mdadm.co.patch | 85 -------------- ...-cast-print-arguments-in-super-ddf.c.patch | 51 --------- ...or-message-is-grow-n2-used-on-Linear.patch | 38 ------- ...ow_continue_command-remove-dead-code.patch | 51 --------- ...eading-sync_completed-during-reshape.patch | 56 --------- ...ay-in-the-mdinfo-structure-is-20-byt.patch | 31 ----- ...tive-more-times-before-Grow_continue.patch | 106 ------------------ ...ling-of-sync_action-is-equal-to-idle.patch | 42 ------- ...erly-handle-values-of-sync_completed.patch | 89 --------------- ...ix-build-problem-against-newer-glibc.patch | 31 ----- ...re-suspended-region-is-removed-when-.patch | 63 ----------- ...ory-allocated-for-superblock-bitmap-.patch | 36 ------ mdadm-3.4.1-fix-some-type-comparison.patch | 41 ------- mdadm.spec | 29 +---- sources | 2 +- 27 files changed, 8 insertions(+), 1293 deletions(-) delete mode 100644 mdadm-3.2.4-map-dir.patch delete mode 100644 mdadm-3.2.4-super1-fix-choice-of-data_offset.patch delete mode 100644 mdadm-3.2.5-Add-zlib-license-to-crc32.c.patch delete mode 100644 mdadm-3.2.5-Replace-sha1.h-with-slightly-older-version.patch delete mode 100644 mdadm-3.2.5-imsm-fix-correct-checking-volume-s-degradation.patch delete mode 100644 mdadm-3.2.6-Add-updating-component_size-to-manager-thread-of-mdm.patch delete mode 100644 mdadm-3.2.6-Create.c-check-if-freesize-is-equal-0.patch delete mode 100644 mdadm-3.2.6-Manage_runstop-call-flush_mdmon-if-O_EXCL-fails-on-s.patch delete mode 100644 mdadm-3.2.6-imsm-Forbid-spanning-between-multiple-controllers.patch delete mode 100644 mdadm-3.2.6-imsm-monitor-do-not-finish-migration-if-there-are-no.patch delete mode 100644 mdadm-3.2.6-query-udev-dir-via-pkg-config.patch delete mode 100644 mdadm-3.3.1-Assemble-Only-fail-auto-assemble-in-face-of-mdadm.co.patch delete mode 100644 mdadm-3.3.1-DDF-cast-print-arguments-in-super-ddf.c.patch delete mode 100644 mdadm-3.3.1-Grow-improve-error-message-is-grow-n2-used-on-Linear.patch delete mode 100644 mdadm-3.4-Grow_continue_command-remove-dead-code.patch delete mode 100644 mdadm-3.4-IMSM-retry-reading-sync_completed-during-reshape.patch delete mode 100644 mdadm-3.4-The-sys_name-array-in-the-mdinfo-structure-is-20-byt.patch delete mode 100644 mdadm-3.4-check-reshape_active-more-times-before-Grow_continue.patch delete mode 100644 mdadm-3.4-imsm-add-handling-of-sync_action-is-equal-to-idle.patch delete mode 100644 mdadm-3.4-imsm-properly-handle-values-of-sync_completed.patch delete mode 100644 mdadm-3.4-mdadm.h-Fix-build-problem-against-newer-glibc.patch delete mode 100644 mdadm-3.4-super-intel-ensure-suspended-region-is-removed-when-.patch delete mode 100644 mdadm-3.4-super1-Clear-memory-allocated-for-superblock-bitmap-.patch delete mode 100644 mdadm-3.4.1-fix-some-type-comparison.patch diff --git a/.gitignore b/.gitignore index db9e468..20e7ab9 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ clog /mdadm-3.3.2.tar.xz /mdadm-3.3.4.tar.xz /mdadm-3.4.tar.xz +/mdadm-4.0.tar.xz diff --git a/mdadm-3.2.4-map-dir.patch b/mdadm-3.2.4-map-dir.patch deleted file mode 100644 index f1e9865..0000000 --- a/mdadm-3.2.4-map-dir.patch +++ /dev/null @@ -1,18 +0,0 @@ ---- mdadm-3.2.4/Makefile.map-dir 2012-05-10 12:29:09.687578525 +0200 -+++ mdadm-3.2.4/Makefile 2012-05-10 12:28:05.514380800 +0200 -@@ -67,12 +67,12 @@ - # Both MAP_DIR and MDMON_DIR should be somewhere that persists across the - # pivotroot from early boot to late boot. - # /run is best, but for distros that don't support that, /dev can work. --MAP_DIR=/run/mdadm --MAP_FILE = map -+MAP_DIR=/dev/md -+MAP_FILE = md-device-map - MAP_PATH = $(MAP_DIR)/$(MAP_FILE) - MDMON_DIR = $(MAP_DIR) - # place for autoreplace cookies --FAILED_SLOTS_DIR = /run/mdadm/failed-slots -+FAILED_SLOTS_DIR = $(MDMON_DIR)/failed-slots - DIRFLAGS = -DMAP_DIR=\"$(MAP_DIR)\" -DMAP_FILE=\"$(MAP_FILE)\" - DIRFLAGS += -DMDMON_DIR=\"$(MDMON_DIR)\" - DIRFLAGS += -DFAILED_SLOTS_DIR=\"$(FAILED_SLOTS_DIR)\" diff --git a/mdadm-3.2.4-super1-fix-choice-of-data_offset.patch b/mdadm-3.2.4-super1-fix-choice-of-data_offset.patch deleted file mode 100644 index 62a5ef1..0000000 --- a/mdadm-3.2.4-super1-fix-choice-of-data_offset.patch +++ /dev/null @@ -1,92 +0,0 @@ -From d9751e06a601b5576b1b9e2c8126584083110ca5 Mon Sep 17 00:00:00 2001 -From: NeilBrown -Date: Tue, 15 May 2012 09:51:03 +1000 -Subject: [PATCH] super1: fix choice of data_offset. - -While it is nice to set a high data_offset to leave plenty of head -room it is much more important to leave enough space to allow -of the data of the array. -So after we check that sb->size is still available, only reduce the -'reserved', don't increase it. - -This fixes a bug where --adding a spare fails because it does not have -enough space in it. - -Reported-by: nowhere -Signed-off-by: NeilBrown ---- - super1.c | 31 ++++++++++++++++--------------- - 1 files changed, 16 insertions(+), 15 deletions(-) - -diff --git a/super1.c b/super1.c -index be77c33..4f20cc3 100644 ---- a/super1.c -+++ b/super1.c -@@ -1189,40 +1189,42 @@ static int write_init_super1(struct supertype *st) - case 1: - sb->super_offset = __cpu_to_le64(0); - reserved = bm_space + 4*2; -+ if (reserved < headroom) -+ reserved = headroom; -+ if (reserved + array_size > dsize) -+ reserved = dsize - array_size; - /* Try for multiple of 1Meg so it is nicely aligned */ - #define ONE_MEG (2*1024) -- reserved = ((reserved + ONE_MEG-1)/ONE_MEG) * ONE_MEG; -- if (reserved + __le64_to_cpu(sb->size) > dsize) -- reserved = dsize - __le64_to_cpu(sb->size); -+ if (reserved > ONE_MEG) -+ reserved = (reserved/ONE_MEG) * ONE_MEG; -+ - /* force 4K alignment */ - reserved &= ~7ULL; - -- if (reserved < headroom) -- reserved = headroom; -- - sb->data_offset = __cpu_to_le64(reserved); - sb->data_size = __cpu_to_le64(dsize - reserved); - break; - case 2: - sb_offset = 4*2; - sb->super_offset = __cpu_to_le64(4*2); -- if (4*2 + 4*2 + bm_space + __le64_to_cpu(sb->size) -+ if (4*2 + 4*2 + bm_space + array_size - > dsize) -- bm_space = dsize - __le64_to_cpu(sb->size) -+ bm_space = dsize - array_size - - 4*2 - 4*2; - - reserved = bm_space + 4*2 + 4*2; -+ if (reserved < headroom) -+ reserved = headroom; -+ if (reserved + array_size > dsize) -+ reserved = dsize - array_size; - /* Try for multiple of 1Meg so it is nicely aligned */ - #define ONE_MEG (2*1024) -- reserved = ((reserved + ONE_MEG-1)/ONE_MEG) * ONE_MEG; -- if (reserved + __le64_to_cpu(sb->size) > dsize) -- reserved = dsize - __le64_to_cpu(sb->size); -+ if (reserved > ONE_MEG) -+ reserved = (reserved/ONE_MEG) * ONE_MEG; -+ - /* force 4K alignment */ - reserved &= ~7ULL; - -- if (reserved < headroom) -- reserved = headroom; -- - sb->data_offset = __cpu_to_le64(reserved); - sb->data_size = __cpu_to_le64(dsize - reserved); - break; -@@ -1234,7 +1236,6 @@ static int write_init_super1(struct supertype *st) - goto out; - } - -- - sb->sb_csum = calc_sb_1_csum(sb); - rv = store_super1(st, di->fd); - if (rv == 0 && (__le32_to_cpu(sb->feature_map) & 1)) --- -1.7.7.6 - diff --git a/mdadm-3.2.5-Add-zlib-license-to-crc32.c.patch b/mdadm-3.2.5-Add-zlib-license-to-crc32.c.patch deleted file mode 100644 index 4915dd9..0000000 --- a/mdadm-3.2.5-Add-zlib-license-to-crc32.c.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 39fe768b8d9f3bd641f98029cb33f61f0c66841b Mon Sep 17 00:00:00 2001 -From: Jes Sorensen -Date: Wed, 3 Oct 2012 10:00:34 +0200 -Subject: [PATCH 2/2] Add zlib license to crc32.c - -Signed-off-by: Jes Sorensen -Signed-off-by: NeilBrown ---- - crc32.c | 20 ++++++++++++++++++++ - 1 file changed, 20 insertions(+) - -diff --git a/crc32.c b/crc32.c -index 12d08e5..94fda06 100644 ---- a/crc32.c -+++ b/crc32.c -@@ -2,6 +2,26 @@ - * Copyright (C) 1995-2003 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h - * -+ * Note: zlib license from from zlib.h added explicitly as mdadm does -+ * not include zlib.h. License from v1.2.2 of zlib: -+ * -+ * This software is provided 'as-is', without any express or implied -+ * warranty. In no event will the authors be held liable for any damages -+ * arising from the use of this software. -+ * -+ * Permission is granted to anyone to use this software for any purpose, -+ * including commercial applications, and to alter it and redistribute it -+ * freely, subject to the following restrictions: -+ * -+ * 1. The origin of this software must not be misrepresented; you must not -+ * claim that you wrote the original software. If you use this software -+ * in a product, an acknowledgment in the product documentation would be -+ * appreciated but is not required. -+ * 2. Altered source versions must be plainly marked as such, and must not be -+ * misrepresented as being the original software. -+ * 3. This notice may not be removed or altered from any source distribution. -+ * -+ * - * Thanks to Rodney Brown for his contribution of faster - * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing - * tables for updating the shift register in one step with three exclusive-ors --- -1.7.11.4 - diff --git a/mdadm-3.2.5-Replace-sha1.h-with-slightly-older-version.patch b/mdadm-3.2.5-Replace-sha1.h-with-slightly-older-version.patch deleted file mode 100644 index bbdd8d2..0000000 --- a/mdadm-3.2.5-Replace-sha1.h-with-slightly-older-version.patch +++ /dev/null @@ -1,39 +0,0 @@ -From c0e59ebcf91e43bdf3e1dbd69a59980655e3ac38 Mon Sep 17 00:00:00 2001 -From: NeilBrown -Date: Wed, 3 Oct 2012 13:34:15 +1000 -Subject: [PATCH 1/2] Replace sha1.h with slightly older version. - -sha1.h claims GPL3+, while sha1.c claims GPL2+. This is -inconsistent and technically prevents the whole from being -distributed under GPL2. -So replace sha1.h with a version from the GCC sources from before - Tue Apr 20 08:36:39 2010 -when the copyright notice was updated. - -Reported-by: Jes Sorensen -Signed-off-by: NeilBrown ---- - sha1.h | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/sha1.h b/sha1.h -index a601d96..d9b07f8 100644 ---- a/sha1.h -+++ b/sha1.h -@@ -1,11 +1,11 @@ - /* Declarations of functions and data types used for SHA1 sum - library functions. -- Copyright (C) 2000, 2001, 2003, 2005, 2006, 2008, 2010 -+ Copyright (C) 2000, 2001, 2003, 2005, 2006, 2008 - Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the -- Free Software Foundation; either version 3, or (at your option) any -+ Free Software Foundation; either version 2, or (at your option) any - later version. - - This program is distributed in the hope that it will be useful, --- -1.7.11.4 - diff --git a/mdadm-3.2.5-imsm-fix-correct-checking-volume-s-degradation.patch b/mdadm-3.2.5-imsm-fix-correct-checking-volume-s-degradation.patch deleted file mode 100644 index fa5962a..0000000 --- a/mdadm-3.2.5-imsm-fix-correct-checking-volume-s-degradation.patch +++ /dev/null @@ -1,46 +0,0 @@ -From e1993023991a6fa6539cc604b4b3d6718833250d Mon Sep 17 00:00:00 2001 -From: Lukasz Dorau -Date: Fri, 25 May 2012 15:06:41 +0200 -Subject: [PATCH] imsm: fix: correct checking volume's degradation - -We do not check the return value of sysfs_get_ll() now. It is wrong. -If reading of the sysfs "degraded" key does not succeed, -the "new_degraded" variable will not be initiated -and accidentally it can have the value of "degraded" variable. -In that case the change of degradation will not be checked. - -It happens if mdadm is compiled with gcc's "-fstack-protector" option -when one tries to stop a volume under reshape (e.g. OLCE). -Reshape seems to be finished then (metadata is in normal/clean state) -but it is not finished, it is broken and data are corrupted. - -Now we always check the return value of sysfs_get_ll(). -Even if reading of the sysfs "degraded" key does not succeed -(rv == -1) the change of degradation will be checked. - -Signed-off-by: Lukasz Dorau -Signed-off-by: NeilBrown ---- - super-intel.c | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -diff --git a/super-intel.c b/super-intel.c -index 6c87e20..07ab9ae 100644 ---- a/super-intel.c -+++ b/super-intel.c -@@ -10370,8 +10370,10 @@ int check_degradation_change(struct mdinfo *info, - int degraded) - { - unsigned long long new_degraded; -- sysfs_get_ll(info, NULL, "degraded", &new_degraded); -- if (new_degraded != (unsigned long long)degraded) { -+ int rv; -+ -+ rv = sysfs_get_ll(info, NULL, "degraded", &new_degraded); -+ if ((rv == -1) || (new_degraded != (unsigned long long)degraded)) { - /* check each device to ensure it is still working */ - struct mdinfo *sd; - new_degraded = 0; --- -1.7.10.2 - diff --git a/mdadm-3.2.6-Add-updating-component_size-to-manager-thread-of-mdm.patch b/mdadm-3.2.6-Add-updating-component_size-to-manager-thread-of-mdm.patch deleted file mode 100644 index bc51a39..0000000 --- a/mdadm-3.2.6-Add-updating-component_size-to-manager-thread-of-mdm.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 4edb8530e889fc7b5e1b5471a0fbfd6c3c116b4a Mon Sep 17 00:00:00 2001 -From: Pawel Baldysiak -Date: Wed, 3 Apr 2013 12:43:42 +1100 -Subject: [PATCH] Add updating component_size to manager thread of mdmon - -Mdmon does not update component_size now. It is wrong because in case -of size's expansion component_size is changed by mdadm but mdmon does not -reread its new value and uses a wrong, old one. As a result the metadata -is incorrect during size's expansion. It contains no information that -resync is in progress (there is no checkpoint too). The metadata is -as if resync has already been finished but it has not. - -Component_size will be set to match information in sysfs. This value -will be updated by manager thread in manage_member() function. -Now mdmon uses the correct, current value of component_size and the -correct metadata (containing information about resync and checkpoint) -is written. - -Signed-off-by: Pawel Baldysiak -Signed-off-by: NeilBrown ---- - managemon.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/managemon.c b/managemon.c -index d155b04..2c55b3c 100644 ---- a/managemon.c -+++ b/managemon.c -@@ -444,6 +444,7 @@ static void manage_member(struct mdstat_ent *mdstat, - char buf[64]; - int frozen; - struct supertype *container = a->container; -+ unsigned long long int component_size = 0; - - if (container == NULL) - /* Raced with something */ -@@ -453,6 +454,9 @@ static void manage_member(struct mdstat_ent *mdstat, - a->info.array.raid_disks = mdstat->raid_disks; - // MORE - -+ if (sysfs_get_ll(&a->info, NULL, "component_size", &component_size) >= 0) -+ a->info.component_size = component_size << 1; -+ - /* honor 'frozen' */ - if (sysfs_get_str(&a->info, NULL, "metadata_version", buf, sizeof(buf)) > 0) - frozen = buf[9] == '-'; --- -1.8.1.4 - diff --git a/mdadm-3.2.6-Create.c-check-if-freesize-is-equal-0.patch b/mdadm-3.2.6-Create.c-check-if-freesize-is-equal-0.patch deleted file mode 100644 index 59ad001..0000000 --- a/mdadm-3.2.6-Create.c-check-if-freesize-is-equal-0.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 066e92f017df22c879c455494d2c1743ef7f3aca Mon Sep 17 00:00:00 2001 -From: Lukasz Dorau -Date: Fri, 16 Nov 2012 17:24:36 +0100 -Subject: [PATCH] Create.c: check if freesize is equal 0 - -"freesize" can be equal 0, particularly after rounding to the chunk's size. -Creating should be aborted in such case. - -Signed-off-by: Lukasz Dorau -Signed-off-by: NeilBrown ---- - Create.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/Create.c b/Create.c -index afcf1a5..436bd1d 100644 ---- a/Create.c -+++ b/Create.c -@@ -407,6 +407,11 @@ - do_default_chunk = 0; - } - } -+ if (!freesize) { -+ fprintf(stderr, Name ": no free space left on %s\n", dname); -+ fail = 1; -+ continue; -+ } - - if (size && freesize < size) { - fprintf(stderr, Name ": %s is smaller than given size." diff --git a/mdadm-3.2.6-Manage_runstop-call-flush_mdmon-if-O_EXCL-fails-on-s.patch b/mdadm-3.2.6-Manage_runstop-call-flush_mdmon-if-O_EXCL-fails-on-s.patch deleted file mode 100644 index a13e8fa..0000000 --- a/mdadm-3.2.6-Manage_runstop-call-flush_mdmon-if-O_EXCL-fails-on-s.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 2fdf559d74a48806900b63f1b4504a18dec048a9 Mon Sep 17 00:00:00 2001 -From: NeilBrown -Date: Mon, 22 Apr 2013 17:05:33 +1000 -Subject: [PATCH] Manage_runstop: call flush_mdmon if O_EXCL fails on stopping - mdmon array. - -When stopping an mdmon array, at reshape might be being aborted -which inhibets O_EXCL. So if that is possible, call flush_mdmon -to make sure mdmon isn't still busy. - -Reported-by: Pawel Baldysiak -Signed-off-by: NeilBrown ---- - Manage.c | 29 ++++++++++++++++++++++++----- - 1 file changed, 24 insertions(+), 5 deletions(-) - -diff --git a/Manage.c b/Manage.c -index e3d3041..e37f415 100644 ---- a/Manage.c -+++ b/Manage.c -@@ -221,8 +222,19 @@ int Manage_runstop(char *devname, int fd, int runstop, - /* Get EXCL access first. If this fails, then attempting - * to stop is probably a bad idea. - */ -- close(fd); -- fd = open(devname, O_RDONLY|O_EXCL); -+ mdi = sysfs_read(fd, -1, GET_LEVEL|GET_VERSION); -+ close(fd); -+ count = 5; -+ while (((fd = open(devname, O_RDONLY|O_EXCL)) < 0 -+ || fd2devnum(fd) != devnum) -+ && mdi && !is_subarray(mdi->text_version) -+ && mdmon_running(devname2devnum(mdi->sys_name)) -+ && count) { -+ if (fd >= 0) -+ close(fd); -+ flush_mdmon(mdi->sys_name); -+ count--; -+ } - if (fd < 0 || fd2devnum(fd) != devnum) { - if (fd >= 0) - close(fd); -@@ -237,7 +257,6 @@ int Manage_runstop(char *devname, int fd, int runstop, - devname); - return 1; - } -- mdi = sysfs_read(fd, -1, GET_LEVEL|GET_VERSION); - if (mdi && - mdi->array.level > 0 && - is_subarray(mdi->text_version)) { - --- -1.8.3.1 - diff --git a/mdadm-3.2.6-imsm-Forbid-spanning-between-multiple-controllers.patch b/mdadm-3.2.6-imsm-Forbid-spanning-between-multiple-controllers.patch deleted file mode 100644 index b5959ae..0000000 --- a/mdadm-3.2.6-imsm-Forbid-spanning-between-multiple-controllers.patch +++ /dev/null @@ -1,73 +0,0 @@ -From 3c309c82699ae3bebc716dbd5abea079dd41184a Mon Sep 17 00:00:00 2001 -From: Marcin Tomczak -Date: Fri, 9 Nov 2012 15:46:36 +0100 -Subject: [PATCH] imsm: Forbid spanning between multiple controllers. - -Attaching disks to multiple controllers of the same type has been -allowed so far. Now spanning between multiple controllers is disallowed -at all by IMSM metadata. - -Signed-off-by: Marcin Tomczak -Reviewed-by: Lukasz Dorau -Signed-off-by: NeilBrown ---- - super-intel.c | 25 ++++++++----------------- - 1 file changed, 8 insertions(+), 17 deletions(-) - -diff --git a/super-intel.c b/super-intel.c -index 202b83f..4ac9d42 100644 ---- a/super-intel.c -+++ b/super-intel.c -@@ -558,20 +558,11 @@ static int attach_hba_to_super(struct intel_super *super, struct sys_dev *device - if (super->hba == NULL) { - super->hba = alloc_intel_hba(device); - return 1; -- } -- -- hba = super->hba; -- /* Intel metadata allows for all disks attached to the same type HBA. -- * Do not sypport odf HBA types mixing -- */ -- if (device->type != hba->type) -+ } else -+ /* IMSM metadata disallows to attach disks to multiple -+ * controllers. -+ */ - return 2; -- -- while (hba->next) -- hba = hba->next; -- -- hba->next = alloc_intel_hba(device); -- return 1; - } - - static struct sys_dev* find_disk_attached_hba(int fd, const char *devname) -@@ -3073,11 +3064,11 @@ static int compare_super_imsm(struct supertype *st, struct supertype *tst) - */ - if (!check_env("IMSM_NO_PLATFORM")) { -- if (!first->hba || !sec->hba || -- (first->hba->type != sec->hba->type)) { -+ if (first->hba && sec->hba && -+ strcmp(first->hba->path, sec->hba->path) != 0) { - fprintf(stderr, - "HBAs of devices does not match %s != %s\n", -- first->hba ? get_sys_dev_type(first->hba->type) : NULL, -- sec->hba ? get_sys_dev_type(sec->hba->type) : NULL); -+ first->hba ? first->hba->path : NULL, -+ sec->hba ? sec->hba->path : NULL); - return 3; - } - } -@@ -3819,7 +3810,7 @@ static int find_intel_hba_capability(int fd, struct intel_super *super, char *de - } - - fprintf(stderr, ").\n" -- " Mixing devices attached to different controllers " -+ " Mixing devices attached to multiple controllers " - "is not allowed.\n"); - } - free_sys_dev(&hba_name); --- -1.7.11.7 - diff --git a/mdadm-3.2.6-imsm-monitor-do-not-finish-migration-if-there-are-no.patch b/mdadm-3.2.6-imsm-monitor-do-not-finish-migration-if-there-are-no.patch deleted file mode 100644 index 202f61e..0000000 --- a/mdadm-3.2.6-imsm-monitor-do-not-finish-migration-if-there-are-no.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 79b68f1b48b0967da999945e310aef628c9bca4c Mon Sep 17 00:00:00 2001 -From: Przemyslaw Czarnowski -Date: Thu, 18 Apr 2013 10:51:37 +0200 -Subject: [PATCH] imsm: monitor: do not finish migration if there are no failed - disks - -Transition from "degraded" to "recovery" made in OROM is slightly different -than the same transision in mdadm. Missing disk is not removed from list of -raid devices, but just from map. Therefore mdadm should not end migration -basing on existence of list of missing disks but should rely on count of -failed disks. - -Signed-off-by: Przemyslaw Czarnowski -Tested-by: Pawel Baldysiak -Signed-off-by: NeilBrown ---- - super-intel.c | 9 ++++++++- - 1 file changed, 8 insertions(+), 1 deletion(-) - -diff --git a/super-intel.c b/super-intel.c -index 24016b7..3f15b0f 100644 ---- a/super-intel.c -+++ b/super-intel.c -@@ -6886,6 +6886,12 @@ static void handle_missing(struct intel_super *super, struct imsm_dev *dev) - if (!super->missing) - return; - -+ /* When orom adds replacement for missing disk it does -+ * not remove entry of missing disk, but just updates map with -+ * new added disk. So it is not enough just to test if there is -+ * any missing disk, we have to look if there are any failed disks -+ * in map to stop migration */ -+ - dprintf("imsm: mark missing\n"); - /* end process for initialization and rebuild only - */ -@@ -6896,7 +6902,8 @@ static void handle_missing(struct intel_super *super, struct imsm_dev *dev) - failed = imsm_count_failed(super, dev, MAP_0); - map_state = imsm_check_degraded(super, dev, failed, MAP_0); - -- end_migration(dev, super, map_state); -+ if (failed) -+ end_migration(dev, super, map_state); - } - for (dl = super->missing; dl; dl = dl->next) - mark_missing(dev, &dl->disk, dl->index); --- -1.8.1.4 - diff --git a/mdadm-3.2.6-query-udev-dir-via-pkg-config.patch b/mdadm-3.2.6-query-udev-dir-via-pkg-config.patch deleted file mode 100644 index 874c403..0000000 --- a/mdadm-3.2.6-query-udev-dir-via-pkg-config.patch +++ /dev/null @@ -1,54 +0,0 @@ -From fa0d79e2b2642a2f8b04d34dfef866dbabc69e1e Mon Sep 17 00:00:00 2001 -From: Samuli Suominen -Date: Mon, 13 Aug 2012 13:44:22 -0400 -Subject: [PATCH] query udev dir via pkg-config - -Since udev is moving its internal dir around, query it via pkg-config -rather than hardcoding the old path. This should work with new/old -versions. - -Signed-off-by: Samuli Suominen -Signed-off-by: Mike Frysinger -Signed-off-by: NeilBrown ---- - Makefile | 9 ++++++++- - 1 file changed, 8 insertions(+), 1 deletion(-) - -diff --git a/Makefile b/Makefile -index 72f609e..a3e4027 100644 ---- a/Makefile -+++ b/Makefile -@@ -57,6 +57,8 @@ else - DEFAULT_METADATA=1.2 - endif - -+PKG_CONFIG ?= pkg-config -+ - SYSCONFDIR = /etc - CONFFILE = $(SYSCONFDIR)/mdadm.conf - CONFFILE2 = $(SYSCONFDIR)/mdadm/mdadm.conf -@@ -96,6 +98,11 @@ MAN4DIR = $(MANDIR)/man4 - MAN5DIR = $(MANDIR)/man5 - MAN8DIR = $(MANDIR)/man8 - -+UDEVDIR := $(shell $(PKG_CONFIG) --variable=udevdir udev 2>/dev/null) -+ifndef UDEVDIR -+ UDEVDIR = /lib/udev -+endif -+ - OBJS = mdadm.o config.o policy.o mdstat.o ReadMe.o util.o maps.o lib.o \ - Manage.o Assemble.o Build.o \ - Create.o Detail.o Examine.o Grow.o Monitor.o dlink.o Kill.o Query.o \ -@@ -255,7 +262,7 @@ install-man: mdadm.8 md.4 mdadm.conf.5 mdmon.8 - $(INSTALL) -D -m 644 mdadm.conf.5 $(DESTDIR)$(MAN5DIR)/mdadm.conf.5 - - install-udev: udev-md-raid.rules -- $(INSTALL) -D -m 644 udev-md-raid.rules $(DESTDIR)/lib/udev/rules.d/64-md-raid.rules -+ $(INSTALL) -D -m 644 udev-md-raid.rules $(DESTDIR)$(UDEVDIR)/rules.d/64-md-raid.rules - - uninstall: - rm -f $(DESTDIR)$(MAN8DIR)/mdadm.8 $(DESTDIR)$(MAN8DIR)/mdmon.8 $(DESTDIR)$(MAN4DIR)/md.4 $(DESTDIR)$(MAN5DIR)/mdadm.conf.5 $(DESTDIR)$(BINDIR)/mdadm - --- -1.8.1.4 - diff --git a/mdadm-3.3.1-Assemble-Only-fail-auto-assemble-in-face-of-mdadm.co.patch b/mdadm-3.3.1-Assemble-Only-fail-auto-assemble-in-face-of-mdadm.co.patch deleted file mode 100644 index 5215789..0000000 --- a/mdadm-3.3.1-Assemble-Only-fail-auto-assemble-in-face-of-mdadm.co.patch +++ /dev/null @@ -1,85 +0,0 @@ -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 --- -1.9.3 - diff --git a/mdadm-3.3.1-DDF-cast-print-arguments-in-super-ddf.c.patch b/mdadm-3.3.1-DDF-cast-print-arguments-in-super-ddf.c.patch deleted file mode 100644 index 9f68beb..0000000 --- a/mdadm-3.3.1-DDF-cast-print-arguments-in-super-ddf.c.patch +++ /dev/null @@ -1,51 +0,0 @@ -From d13566f9b6ff8377f45cd025a1cd1a58bcb4e857 Mon Sep 17 00:00:00 2001 -From: Guy Menanteau -Date: Mon, 4 Aug 2014 16:53:03 +0200 -Subject: [PATCH] DDF: cast print arguments in super-ddf.c - -mdadm fails to build on ppc64 and ppc64le architectures. -=== -super-ddf.c: In function '_set_config_size': -super-ddf.c:2849:4: error: format '%llx' expects argument of type 'long long unsigned int', but argument 6 has type '__u64' [-Werror=format=] - pr_err("%s: %x:%x: workspace size 0x%llx too big, ignoring\n", - ^ -super-ddf.c:2855:2: error: format '%llx' expects argument of type 'long long unsigned int', but argument 6 has type '__u64' [-Werror=format=] - dprintf("%s: %x:%x config_size %llx, DDF structure is %llx blocks\n", - ^ -cc1: all warnings being treated as errors -: recipe for target 'super-ddf.o' failed -=== - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1125883 -Signed-off-by: -Signed-off-by: Michel Normand -Signed-off-by: NeilBrown ---- - super-ddf.c | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -diff --git a/super-ddf.c b/super-ddf.c -index 8957c2e..bc0ce2c 100644 ---- a/super-ddf.c -+++ b/super-ddf.c -@@ -2847,13 +2847,15 @@ static void _set_config_size(struct phys_disk_entry *pde, const struct dl *dl) - __u64 wsp = cfs - t; - if (wsp > 1024*1024*2ULL && wsp > dl->size / 16) { - pr_err("%s: %x:%x: workspace size 0x%llx too big, ignoring\n", -- __func__, dl->major, dl->minor, wsp); -+ __func__, dl->major, dl->minor, -+ (unsigned long long)wsp); - } else - cfs = t; - } - pde->config_size = cpu_to_be64(cfs); - dprintf("%s: %x:%x config_size %llx, DDF structure is %llx blocks\n", -- __func__, dl->major, dl->minor, cfs, dl->size-cfs); -+ __func__, dl->major, dl->minor, -+ (unsigned long long)cfs, (unsigned long long)(dl->size-cfs)); - } - - /* Add a device to a container, either while creating it or while --- -1.9.3 - diff --git a/mdadm-3.3.1-Grow-improve-error-message-is-grow-n2-used-on-Linear.patch b/mdadm-3.3.1-Grow-improve-error-message-is-grow-n2-used-on-Linear.patch deleted file mode 100644 index e3aeadd..0000000 --- a/mdadm-3.3.1-Grow-improve-error-message-is-grow-n2-used-on-Linear.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 46643e1ad5ece5f1257b2d827e36231df44929a2 Mon Sep 17 00:00:00 2001 -From: NeilBrown -Date: Tue, 29 Jul 2014 13:37:42 +1000 -Subject: [PATCH] Grow: improve error message is "--grow -n2" used on Linear - arrays. - -Linear arrays don't respond to setting raid-disks, only to -adding a device. - -Reported-by: mulhern -Reported-by: Jes Sorensen -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1122146 -Signed-off-by: NeilBrown ---- - Grow.c | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/Grow.c b/Grow.c -index af59347..a9c8589 100644 ---- a/Grow.c -+++ b/Grow.c -@@ -1028,7 +1028,12 @@ char *analyse_change(char *devname, struct mdinfo *info, struct reshape *re) - - switch (info->array.level) { - default: -- return "Cannot understand this RAID level"; -+ return "No reshape is possibly for this RAID level"; -+ case LEVEL_LINEAR: -+ if (info->delta_disks != UnSet) -+ return "Only --add is supported for LINEAR, setting --raid-disks is not needed"; -+ else -+ return "Only --add is supported for LINEAR, other --grow options are not meaningful"; - case 1: - /* RAID1 can convert to RAID1 with different disks, or - * raid5 with 2 disks, or --- -1.9.3 - diff --git a/mdadm-3.4-Grow_continue_command-remove-dead-code.patch b/mdadm-3.4-Grow_continue_command-remove-dead-code.patch deleted file mode 100644 index 5210d47..0000000 --- a/mdadm-3.4-Grow_continue_command-remove-dead-code.patch +++ /dev/null @@ -1,51 +0,0 @@ -commit 12add44564f195878c3e346e4bbae845dec67db3 -Author: Jes Sorensen -Date: Fri Mar 4 16:30:22 2016 -0500 - - Grow: Grow_continue_command() remove dead code - - All cases where fd2 is used are completed with a close(fd2), so there - is no need to set fd2 = -1 or check for it before exiting. - - Reviewed-by: NeilBrown - Signed-off-by: Jes Sorensen - -diff --git a/Grow.c b/Grow.c -index c4f417e..c4af5c0 100755 ---- a/Grow.c -+++ b/Grow.c -@@ -4752,7 +4752,7 @@ int Grow_continue_command(char *devname, int fd, - struct mdinfo *cc = NULL; - struct mdstat_ent *mdstat = NULL; - int cfd = -1; -- int fd2 = -1; -+ int fd2; - - dprintf("Grow continue from command line called for %s\n", - devname); -@@ -4796,8 +4796,6 @@ int Grow_continue_command(char *devname, int fd, - continue; - err = st->ss->load_super(st, fd2, NULL); - close(fd2); -- /* invalidate fd2 to avoid possible double close() */ -- fd2 = -1; - if (err) - continue; - break; -@@ -4894,7 +4892,6 @@ int Grow_continue_command(char *devname, int fd, - sysfs_init(content, fd2, mdstat->devnm); - - close(fd2); -- fd2 = -1; - - /* start mdmon in case it is not running - */ -@@ -4924,8 +4921,6 @@ int Grow_continue_command(char *devname, int fd, - ret_val = Grow_continue(fd, st, content, backup_file, 1, 0); - - Grow_continue_command_exit: -- if (fd2 > -1) -- close(fd2); - if (cfd > -1) - close(cfd); - st->ss->free_super(st); diff --git a/mdadm-3.4-IMSM-retry-reading-sync_completed-during-reshape.patch b/mdadm-3.4-IMSM-retry-reading-sync_completed-during-reshape.patch deleted file mode 100644 index a3dd86e..0000000 --- a/mdadm-3.4-IMSM-retry-reading-sync_completed-during-reshape.patch +++ /dev/null @@ -1,56 +0,0 @@ -From df2647fa5bbe84960dae11531e34bafef549b8ff Mon Sep 17 00:00:00 2001 -From: Pawel Baldysiak -Date: Tue, 17 May 2016 13:24:41 +0200 -Subject: [PATCH] IMSM: retry reading sync_completed during reshape - -The sync_completed after restarting a reshape -(for example - after reboot) is set to "delayed" until -mdmon changes the state. Mdadm does not wait for that change with -old kernels. If this condition occurs - it exits and reshape -is not continuing. This patch adds retry of reading sync_complete -with a delay. It gives time for mdmon to change the "delayed" state. - -Signed-off-by: Pawel Baldysiak -Signed-off-by: Jes Sorensen ---- - super-intel.c | 17 ++++++++++++----- - 1 file changed, 12 insertions(+), 5 deletions(-) - -diff --git a/super-intel.c b/super-intel.c -index ba3ee48..7e2860c 100644 ---- a/super-intel.c -+++ b/super-intel.c -@@ -10378,6 +10378,7 @@ exit_imsm_reshape_super: - int wait_for_reshape_imsm(struct mdinfo *sra, int ndata) - { - int fd = sysfs_get_fd(sra, NULL, "sync_completed"); -+ int retry = 3; - unsigned long long completed; - /* to_complete : new sync_max position */ - unsigned long long to_complete = sra->reshape_progress; -@@ -10388,11 +10389,17 @@ int wait_for_reshape_imsm(struct mdinfo *sra, int ndata) - return 1; - } - -- if (sysfs_fd_get_ll(fd, &completed) < 0) { -- dprintf("cannot read reshape_position (no reshape in progres)\n"); -- close(fd); -- return 1; -- } -+ do { -+ if (sysfs_fd_get_ll(fd, &completed) < 0) { -+ if (!retry) { -+ dprintf("cannot read reshape_position (no reshape in progres)\n"); -+ close(fd); -+ return 1; -+ } -+ usleep(30000); -+ } else -+ break; -+ } while (retry--); - - if (completed > position_to_set) { - dprintf("wrong next position to set %llu (%llu)\n", --- -2.5.5 - diff --git a/mdadm-3.4-The-sys_name-array-in-the-mdinfo-structure-is-20-byt.patch b/mdadm-3.4-The-sys_name-array-in-the-mdinfo-structure-is-20-byt.patch deleted file mode 100644 index 91d89d6..0000000 --- a/mdadm-3.4-The-sys_name-array-in-the-mdinfo-structure-is-20-byt.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 6e6e98746dba7e900f23e92bbb0da01fe7a169da Mon Sep 17 00:00:00 2001 -From: Nikhil Kshirsagar -Date: Fri, 10 Jun 2016 08:50:10 +0530 -Subject: [PATCH] The sys_name array in the mdinfo structure is 20 bytes of - storage. - -Increasing the size of this array to 32 bytes to handle cases with -longer device names. - -Signed-off-by: Nikhil Kshirsagar -Signed-off-by: Jes Sorensen ---- - mdadm.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/mdadm.h b/mdadm.h -index 3d6c638..1fd38a3 100755 ---- a/mdadm.h -+++ b/mdadm.h -@@ -289,7 +289,7 @@ struct mdinfo { - int container_enough; /* flag external handlers can set to - * indicate that subarrays have not enough (-1), - * enough to start (0), or all expected disks (1) */ -- char sys_name[20]; -+ char sys_name[32]; - struct mdinfo *devs; - struct mdinfo *next; - --- -2.5.5 - diff --git a/mdadm-3.4-check-reshape_active-more-times-before-Grow_continue.patch b/mdadm-3.4-check-reshape_active-more-times-before-Grow_continue.patch deleted file mode 100644 index df95841..0000000 --- a/mdadm-3.4-check-reshape_active-more-times-before-Grow_continue.patch +++ /dev/null @@ -1,106 +0,0 @@ -commit 8800f85381d0cd9689dee62bbbdafdb359100389 -Author: Xiao Ni -Date: Thu Jun 16 09:41:02 2016 +0800 - - MDADM:Check mdinfo->reshape_active more times before calling Grow_continue - - When reshaping a 3 drives raid5 to 4 drives raid5, there is a chance that - it can't start the reshape. If the disks are not enough to have spaces for - relocating the data_offset, it needs to call start_reshape and then run - mdadm --grow --continue by systemd. But mdadm --grow --continue fails - because it checkes that info->reshape_active is 0. - - The info->reshape_active is got from the superblock of underlying devices. - Function start_reshape write reshape to /sys/../sync_action. Before writing - latest superblock to underlying devices, mdadm --grow --continue is called. - There is a chance info->reshape_active is 0. We should wait for superblock - updating more time before calling Grow_continue. - - Signed-off-by: Xiao Ni - Signed-off-by: Jes Sorensen - -diff --git a/Grow.c b/Grow.c -index f184d9c..628f0e7 100755 ---- a/Grow.c -+++ b/Grow.c -@@ -4788,6 +4788,7 @@ int Grow_continue_command(char *devname, int fd, - dprintf("Grow continue is run for "); - if (st->ss->external == 0) { - int d; -+ int cnt = 5; - dprintf_cont("native array (%s)\n", devname); - if (ioctl(fd, GET_ARRAY_INFO, &array.array) < 0) { - pr_err("%s is not an active md array - aborting\n", devname); -@@ -4799,36 +4800,42 @@ int Grow_continue_command(char *devname, int fd, - * FIXME we should really get what we need from - * sysfs - */ -- for (d = 0; d < MAX_DISKS; d++) { -- mdu_disk_info_t disk; -- char *dv; -- int err; -- disk.number = d; -- if (ioctl(fd, GET_DISK_INFO, &disk) < 0) -- continue; -- if (disk.major == 0 && disk.minor == 0) -- continue; -- if ((disk.state & (1 << MD_DISK_ACTIVE)) == 0) -- continue; -- dv = map_dev(disk.major, disk.minor, 1); -- if (!dv) -- continue; -- fd2 = dev_open(dv, O_RDONLY); -- if (fd2 < 0) -- continue; -- err = st->ss->load_super(st, fd2, NULL); -- close(fd2); -- if (err) -- continue; -- break; -- } -- if (d == MAX_DISKS) { -- pr_err("Unable to load metadata for %s\n", -- devname); -- ret_val = 1; -- goto Grow_continue_command_exit; -- } -- st->ss->getinfo_super(st, content, NULL); -+ do { -+ for (d = 0; d < MAX_DISKS; d++) { -+ mdu_disk_info_t disk; -+ char *dv; -+ int err; -+ disk.number = d; -+ if (ioctl(fd, GET_DISK_INFO, &disk) < 0) -+ continue; -+ if (disk.major == 0 && disk.minor == 0) -+ continue; -+ if ((disk.state & (1 << MD_DISK_ACTIVE)) == 0) -+ continue; -+ dv = map_dev(disk.major, disk.minor, 1); -+ if (!dv) -+ continue; -+ fd2 = dev_open(dv, O_RDONLY); -+ if (fd2 < 0) -+ continue; -+ err = st->ss->load_super(st, fd2, NULL); -+ close(fd2); -+ if (err) -+ continue; -+ break; -+ } -+ if (d == MAX_DISKS) { -+ pr_err("Unable to load metadata for %s\n", -+ devname); -+ ret_val = 1; -+ goto Grow_continue_command_exit; -+ } -+ st->ss->getinfo_super(st, content, NULL); -+ if (!content->reshape_active) -+ sleep(3); -+ else -+ break; -+ } while (cnt-- > 0); - } else { - char *container; - diff --git a/mdadm-3.4-imsm-add-handling-of-sync_action-is-equal-to-idle.patch b/mdadm-3.4-imsm-add-handling-of-sync_action-is-equal-to-idle.patch deleted file mode 100644 index a6e801c..0000000 --- a/mdadm-3.4-imsm-add-handling-of-sync_action-is-equal-to-idle.patch +++ /dev/null @@ -1,42 +0,0 @@ -From b2be2b628b6305712c8df0b3a20ddddc0ac410fb Mon Sep 17 00:00:00 2001 -From: Alexey Obitotskiy -Date: Thu, 16 Jun 2016 11:31:36 +0200 -Subject: [PATCH 1/2] imsm: add handling of sync_action is equal to 'idle' - -After resync is stopped sync_action value become 'idle'. -We treat this case as normal termination of waiting, not as error. - -Signed-off-by: Alexey Obitotskiy -Reviewed-by: Pawel Baldysiak -Signed-off-by: Jes Sorensen ---- - super-intel.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/super-intel.c b/super-intel.c -index 7e2860c..7950bef 100644 ---- a/super-intel.c -+++ b/super-intel.c -@@ -10423,6 +10423,8 @@ int wait_for_reshape_imsm(struct mdinfo *sra, int ndata) - if (sysfs_get_str(sra, NULL, "sync_action", - action, 20) > 0 && - strncmp(action, "reshape", 7) != 0) { -+ if (strncmp(action, "idle", 4) == 0) -+ break; - close(fd); - return -1; - } -@@ -10432,9 +10434,9 @@ int wait_for_reshape_imsm(struct mdinfo *sra, int ndata) - return 1; - } - } while (completed < position_to_set); -+ - close(fd); - return 0; -- - } - - /******************************************************************************* --- -2.5.5 - diff --git a/mdadm-3.4-imsm-properly-handle-values-of-sync_completed.patch b/mdadm-3.4-imsm-properly-handle-values-of-sync_completed.patch deleted file mode 100644 index 182a211..0000000 --- a/mdadm-3.4-imsm-properly-handle-values-of-sync_completed.patch +++ /dev/null @@ -1,89 +0,0 @@ -From 0febb20c458a488460eadade74a6c283aadaf96a Mon Sep 17 00:00:00 2001 -From: Alexey Obitotskiy -Date: Thu, 16 Jun 2016 11:31:37 +0200 -Subject: [PATCH 2/2] imsm: properly handle values of sync_completed - -The sync_completed can be set to such values: -- two numbers of processed sectors and total during synchronization, -separated with '/'; -- 'none' if synchronization process is stopped; -- 'delayed' if synchronization process is delayed. -Handle value of sync_completed not only as numbers but -also check for 'none' and 'delayed'. - -Signed-off-by: Alexey Obitotskiy -Reviewed-by: Pawel Baldysiak -Signed-off-by: Jes Sorensen ---- - super-intel.c | 36 ++++++++++++++++++++++++++++++++++-- - 1 file changed, 34 insertions(+), 2 deletions(-) - -diff --git a/super-intel.c b/super-intel.c -index 7950bef..92817e9 100644 ---- a/super-intel.c -+++ b/super-intel.c -@@ -10363,6 +10363,33 @@ exit_imsm_reshape_super: - return ret_val; - } - -+#define COMPLETED_OK 0 -+#define COMPLETED_NONE 1 -+#define COMPLETED_DELAYED 2 -+ -+static int read_completed(int fd, unsigned long long *val) -+{ -+ int ret; -+ char buf[50]; -+ -+ ret = sysfs_fd_get_str(fd, buf, 50); -+ if (ret < 0) -+ return ret; -+ -+ ret = COMPLETED_OK; -+ if (strncmp(buf, "none", 4) == 0) { -+ ret = COMPLETED_NONE; -+ } else if (strncmp(buf, "delayed", 7) == 0) { -+ ret = COMPLETED_DELAYED; -+ } else { -+ char *ep; -+ *val = strtoull(buf, &ep, 0); -+ if (ep == buf || (*ep != 0 && *ep != '\n' && *ep != ' ')) -+ ret = -1; -+ } -+ return ret; -+} -+ - /******************************************************************************* - * Function: wait_for_reshape_imsm - * Description: Function writes new sync_max value and waits until -@@ -10417,8 +10444,10 @@ int wait_for_reshape_imsm(struct mdinfo *sra, int ndata) - } - - do { -+ int rc; - char action[20]; - int timeout = 3000; -+ - sysfs_wait(fd, &timeout); - if (sysfs_get_str(sra, NULL, "sync_action", - action, 20) > 0 && -@@ -10428,11 +10457,14 @@ int wait_for_reshape_imsm(struct mdinfo *sra, int ndata) - close(fd); - return -1; - } -- if (sysfs_fd_get_ll(fd, &completed) < 0) { -+ -+ rc = read_completed(fd, &completed); -+ if (rc < 0) { - dprintf("cannot read reshape_position (in loop)\n"); - close(fd); - return 1; -- } -+ } else if (rc == COMPLETED_NONE) -+ break; - } while (completed < position_to_set); - - close(fd); --- -2.5.5 - diff --git a/mdadm-3.4-mdadm.h-Fix-build-problem-against-newer-glibc.patch b/mdadm-3.4-mdadm.h-Fix-build-problem-against-newer-glibc.patch deleted file mode 100644 index f5d7a97..0000000 --- a/mdadm-3.4-mdadm.h-Fix-build-problem-against-newer-glibc.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 977d12d739deedd21ea3ca5a96d0ffd83bd5b4ea Mon Sep 17 00:00:00 2001 -From: Jes Sorensen -Date: Mon, 15 Aug 2016 11:30:39 -0400 -Subject: [PATCH] mdadm.h: Fix build problem against newer glibc - -Newer glibc requires direct include of sys/sysmacros.h in order to -access makedev(). - -Signed-off-by: Jes Sorensen ---- - mdadm.h | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/mdadm.h b/mdadm.h -index 1fd38a3..cfa5beb 100755 ---- a/mdadm.h -+++ b/mdadm.h -@@ -45,6 +45,10 @@ extern __off64_t lseek64 __P ((int __fd, __off64_t __offset, int __whence)); - #include - #include - #include -+#ifdef __GLIBC__ -+/* Newer glibc requires sys/sysmacros.h directly for makedev() */ -+#include -+#endif - #ifdef __dietlibc__ - #include - /* dietlibc has deprecated random and srandom!! */ --- -2.7.4 - diff --git a/mdadm-3.4-super-intel-ensure-suspended-region-is-removed-when-.patch b/mdadm-3.4-super-intel-ensure-suspended-region-is-removed-when-.patch deleted file mode 100644 index 3c52825..0000000 --- a/mdadm-3.4-super-intel-ensure-suspended-region-is-removed-when-.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 942e1cdb4a6a5be02672bc686169c679e775c2be Mon Sep 17 00:00:00 2001 -From: NeilBrown -Date: Thu, 18 Feb 2016 15:53:32 +1100 -Subject: [PATCH] super-intel: ensure suspended region is removed when reshape - completes. - -A recent commit removed a call to abort_reshape() when IMSM reshape -completed. An unanticipated result of this is that the suspended -region is not cleared as it should be. -So after a reshape, a region of the array will cause all IO to block. - -Re-instate the required updates to suspend_{lo,hi} coped from -abort_reshape(). - -This is caught (sometimes) by the test suite. - -Also fix a couple of typos found while exploring the code. - -Reported-by: Ken Moffat -Cc: Artur Paszkiewicz -Fixes: 2139b03c2080 ("imsm: don't call abort_reshape() in imsm_manage_reshape()") -Signed-off-by: NeilBrown -Signed-off-by: Jes Sorensen ---- - super-intel.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/super-intel.c b/super-intel.c -index 90b7b6d..ff0506d 100644 ---- a/super-intel.c -+++ b/super-intel.c -@@ -10465,7 +10465,7 @@ int check_degradation_change(struct mdinfo *info, - * Function: imsm_manage_reshape - * Description: Function finds array under reshape and it manages reshape - * process. It creates stripes backups (if required) and sets -- * checheckpoits. -+ * checkpoints. - * Parameters: - * afd : Backup handle (nattive) - not used - * sra : general array info -@@ -10595,7 +10595,7 @@ static int imsm_manage_reshape( - - start = current_position * 512; - -- /* allign reading start to old geometry */ -+ /* align reading start to old geometry */ - start_buf_shift = start % old_data_stripe_length; - start_src = start - start_buf_shift; - -@@ -10700,6 +10700,10 @@ static int imsm_manage_reshape( - ret_val = 1; - abort: - free(buf); -+ /* See Grow.c: abort_reshape() for further explanation */ -+ sysfs_set_num(sra, NULL, "suspend_lo", 0x7FFFFFFFFFFFFFFFULL); -+ sysfs_set_num(sra, NULL, "suspend_hi", 0); -+ sysfs_set_num(sra, NULL, "suspend_lo", 0); - - return ret_val; - } --- -2.5.0 - diff --git a/mdadm-3.4-super1-Clear-memory-allocated-for-superblock-bitmap-.patch b/mdadm-3.4-super1-Clear-memory-allocated-for-superblock-bitmap-.patch deleted file mode 100644 index 65ba514..0000000 --- a/mdadm-3.4-super1-Clear-memory-allocated-for-superblock-bitmap-.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 1dcee1c9cbcf9592275914706b76b1931490092c Mon Sep 17 00:00:00 2001 -From: Jes Sorensen -Date: Wed, 6 Apr 2016 16:13:59 -0400 -Subject: [PATCH] super1: Clear memory allocated for superblock + bitmap before - use - -load_super1() did not clear memory allocated for the superblock + -bitmap. This causes issues if the superblock does not contain a bitmap -as later checks of bitmap features would rely on the bits being -cleared. - -This bug has been around for a long time, but was only exposed in -mdadm-3.4 with the introduction of the clustering code. - -Reported-by: Jan Stodola -Signed-off-by: Jes Sorensen ---- - super1.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/super1.c b/super1.c -index d6f3c93..8d5543f 100644 ---- a/super1.c -+++ b/super1.c -@@ -2016,6 +2016,8 @@ static int load_super1(struct supertype *st, int fd, char *devname) - return 1; - } - -+ memset(super, 0, SUPER1_SIZE); -+ - if (aread(&afd, super, MAX_SB_SIZE) != MAX_SB_SIZE) { - if (devname) - pr_err("Cannot read superblock on %s\n", --- -2.5.5 - diff --git a/mdadm-3.4.1-fix-some-type-comparison.patch b/mdadm-3.4.1-fix-some-type-comparison.patch deleted file mode 100644 index 39a6d37..0000000 --- a/mdadm-3.4.1-fix-some-type-comparison.patch +++ /dev/null @@ -1,41 +0,0 @@ -commit 1d13b599607e48446273913ce594931ba53df9fd -Author: Xiao Ni -Date: Sat Feb 6 09:18:41 2016 +0800 - - Fix some type comparison problems - - As 26714713cd2bad9e0bf7f4669f6cc4659ceaab6c said, 32 bit signed - timestamps will overflow in the year 2038. It already changed the - utime and ctime in struct mdu_array_info_s from int to unsigned - int. So we need to change the values that compared with them to - unsigned int too. - - Signed-off-by : Xiao Ni - Signed-off-by: Jes Sorensen - -diff --git a/Monitor.c b/Monitor.c -index f19c2e5..6df80f9 100644 ---- a/Monitor.c -+++ b/Monitor.c -@@ -33,7 +33,7 @@ - struct state { - char *devname; - char devnm[32]; /* to sync with mdstat info */ -- long utime; -+ unsigned int utime; - int err; - char *spare_group; - int active, working, failed, spare, raid; -diff --git a/util.c b/util.c -index 970d484..6e7d3fb 100644 ---- a/util.c -+++ b/util.c -@@ -1267,7 +1267,7 @@ struct supertype *guess_super_type(int fd, enum guess_types guess_type) - */ - struct superswitch *ss; - struct supertype *st; -- time_t besttime = 0; -+ unsigned int besttime = 0; - int bestsuper = -1; - int i; - diff --git a/mdadm.spec b/mdadm.spec index 81aa5a0..5f7dc8d 100644 --- a/mdadm.spec +++ b/mdadm.spec @@ -1,7 +1,7 @@ Summary: The mdadm program controls Linux md devices (software RAID arrays) Name: mdadm -Version: 3.4 -Release: 3%{?dist} +Version: 4.0 +Release: 1%{?dist} Source: http://www.kernel.org/pub/linux/utils/raid/mdadm/mdadm-%{version}.tar.xz Source1: mdmonitor.init Source2: raid-check @@ -12,16 +12,6 @@ Source6: mdmonitor.service Source7: mdadm.conf Source8: mdadm_event.conf -Patch1: mdadm-3.4.1-fix-some-type-comparison.patch -Patch2: mdadm-3.4-super-intel-ensure-suspended-region-is-removed-when-.patch -Patch3: mdadm-3.4-super1-Clear-memory-allocated-for-superblock-bitmap-.patch -Patch4: mdadm-3.4-IMSM-retry-reading-sync_completed-during-reshape.patch -Patch5: mdadm-3.4-imsm-add-handling-of-sync_action-is-equal-to-idle.patch -Patch6: mdadm-3.4-imsm-properly-handle-values-of-sync_completed.patch -Patch7: mdadm-3.4-The-sys_name-array-in-the-mdinfo-structure-is-20-byt.patch -Patch8: mdadm-3.4-Grow_continue_command-remove-dead-code.patch -Patch9: mdadm-3.4-check-reshape_active-more-times-before-Grow_continue.patch -Patch10: mdadm-3.4-mdadm.h-Fix-build-problem-against-newer-glibc.patch # Fedora customization patches Patch97: mdadm-3.3-udev.patch Patch98: mdadm-2.5.2-static.patch @@ -50,17 +40,6 @@ file can be used to help with some common tasks. %prep %setup -q -%patch1 -p1 -b .comparison -%patch2 -p1 -b .stop-reshape -%patch3 -p1 -b .clear -%patch4 -p1 -b .retry -%patch5 -p1 -b .syncaction -%patch6 -p1 -b .synccompleted -%patch7 -p1 -b .sysname -%patch8 -p1 -b .dead -%patch9 -p1 -b .before -%patch10 -p1 -b .glibc - # Fedora customization patches %patch97 -p1 -b .udev %patch98 -p1 -b .static @@ -125,6 +104,10 @@ rm -rf %{buildroot} /etc/libreport/events.d/* %changelog +* Thu Jan 12 2017 Xiao Ni - 4.0-1 +- Upgrade to mdadm-4.0 +- Resolves bz1411555 + * Mon Aug 15 2016 Jes Sorensen - 3.4-3 - Fix build against newer glibc (Fedora 26+) diff --git a/sources b/sources index 1018066..4e161c9 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -04b8b21f637540350f8517c7e68d3c63 mdadm-3.4.tar.xz +SHA512 (mdadm-4.0.tar.xz) = 12fb26e6b9c1912698defa406e5e47a7ca8d68d4a9aa7acdc9b463ee2d4a37fc6ecef6beb5395ff619018c3f6bdb6d8c573060d027707540f645ad2265170e8b