[mdadm/f17: 1/2] Avoid resync progress getting lost during expansion of IMSM metadata RAID1/5

Jes Sorensen jsorensen at fedoraproject.org
Tue Apr 23 10:37:08 UTC 2013


commit adb522038d429cc7728c369ce05bf6a1167e066c
Author: Jes Sorensen <Jes.Sorensen at redhat.com>
Date:   Tue Apr 23 12:31:42 2013 +0200

    Avoid resync progress getting lost during expansion of IMSM metadata RAID1/5
    
    Resolves bz948745
    
    Signed-off-by: Jes Sorensen <Jes.Sorensen at redhat.com>

 ...g-component_size-to-manager-thread-of-mdm.patch |   49 ++++++++++++++++++++
 mdadm.spec                                         |    9 +++-
 2 files changed, 57 insertions(+), 1 deletions(-)
---
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
new file mode 100644
index 0000000..bc51a39
--- /dev/null
+++ b/mdadm-3.2.6-Add-updating-component_size-to-manager-thread-of-mdm.patch
@@ -0,0 +1,49 @@
+From 4edb8530e889fc7b5e1b5471a0fbfd6c3c116b4a Mon Sep 17 00:00:00 2001
+From: Pawel Baldysiak <pawel.baldysiak at intel.com>
+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 <pawel.baldysiak at intel.com>
+Signed-off-by: NeilBrown <neilb at suse.de>
+---
+ 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.spec b/mdadm.spec
index 3727fdd..67e2922 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.2.6
-Release:     17%{?dist}
+Release:     18%{?dist}
 Source:      http://www.kernel.org/pub/linux/utils/raid/mdadm/mdadm-%{version}.tar.xz
 Source1:     mdmonitor.init
 Source2:     raid-check
@@ -14,6 +14,7 @@ Source8:     mdadm_event.conf
 Patch1:	     mdadm-3.2.6-Create.c-check-if-freesize-is-equal-0.patch
 Patch2:	     mdadm-3.2.6-imsm-Forbid-spanning-between-multiple-controllers.patch
 Patch3:	     mdadm-3.2.6-query-udev-dir-via-pkg-config.patch
+Patch4:	     mdadm-3.2.6-Add-updating-component_size-to-manager-thread-of-mdm.patch
 Patch93:     mdadm-3.2.6-Remove-offroot-argument-and-default-to-always-settin.patch
 Patch94:     mdadm-3.2.6-Add-support-for-launching-mdmon-via-systemctl-instea.patch
 Patch95:     mdadm-3.2.6-In-case-launching-mdmon-fails-print-an-error-message.patch
@@ -75,6 +76,7 @@ is not used as the system init process.
 %patch1 -p1 -b .raidsize
 %patch2 -p1 -b .multictrl
 %patch3 -p1 -b .udevquery
+%patch4 -p1 -b .component
 
 # Use systemctl to launch mdmon on F18 and higher
 %if !%{fedora17}
@@ -166,6 +168,11 @@ rm -rf %{buildroot}
 %endif
 
 %changelog
+* Wed Apr 23 2013 Jes Sorensen <Jes.Sorensen at redhat.com> - 3.2.6-18
+- Fix problem with IMSM metadata where resync progress would be lost
+  if an array was stopped during ongoing expansion of a RAID1/5 volume.
+- Resolves bz948745
+
 * Wed Apr 23 2013 Jes Sorensen <Jes.Sorensen at redhat.com> - 3.2.6-17
 - Reorder patches to allow for udev query patch to be applied on
   Fedora 17 as well.


More information about the scm-commits mailing list