File 0063-Grow-be-more-careful-if-array-is-stopped-during-crit.patch of Package mdadm.5365

From e0184a0cd0083f6fe3fc0395ab2b9b2909c8d882 Mon Sep 17 00:00:00 2001
From: NeilBrown <neilb@suse.de>
Date: Fri, 15 May 2015 09:42:39 +1000
Subject: [PATCH 084/359] Grow: be more careful if array is stopped during
 critical section.
References: bsc#1081910

In that case, updating 'completed' to 'max_progress' is wrong.

Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Coly Li <colyli@suse.de>

---
 Grow.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/Grow.c b/Grow.c
index ec18078..99f3497 100644
--- a/Grow.c
+++ b/Grow.c
@@ -3850,10 +3850,17 @@ int progress_reshape(struct mdinfo *info, struct reshape *reshape,
 			goto check_progress;
 	}
 	/* Some kernels reset 'sync_completed' to zero,
-	 * we need to have real point we are in md
+	 * we need to have real point we are in md.
+	 * But only if array is actually still reshaping,
+	 * not stopped.
 	 */
-	if (completed == 0)
-		completed = max_progress;
+	if (completed == 0) {
+		char action[20];
+		if (sysfs_get_str(info, NULL, "sync_action",
+				  action, 20) > 0 &&
+		    strncmp(action, "reshape", 7) == 0)
+			completed = max_progress;
+	}
 
 	/* some kernels can give an incorrectly high 'completed' number */
 	completed /= (info->new_chunk/512);
-- 
2.16.1

openSUSE Build Service is sponsored by