]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
WORKAROUND: mdadm hangs during reshape (PART #2)
authorAdam Kwolek <adam.kwolek@intel.com>
Thu, 27 Jan 2011 14:44:39 +0000 (15:44 +0100)
committerNeilBrown <neilb@suse.de>
Fri, 28 Jan 2011 01:03:11 +0000 (11:03 +1000)
After loop can occurs that due to 0 value reported by kernel
we have 0 in completed variable.
This is wrong. we are interested in real completed point.
0 value means that we reached sync point set in md,
so we can set completed variable to just reached point.
this point value is stored in max_progress variable.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
Grow.c

diff --git a/Grow.c b/Grow.c
index 14a4f275512377d25ed3a597f3b5791e18556914..d7deb0f5fb76cd085b59004d02d94e7c3b32c590 100644 (file)
--- a/Grow.c
+++ b/Grow.c
@@ -2468,6 +2468,12 @@ 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
+        */
+       if (completed == 0)
+               completed = max_progress;
+
        /* some kernels can give an incorrectly high 'completed' number */
        completed /= (info->new_chunk/512);
        completed *= (info->new_chunk/512);