From: NeilBrown Date: Thu, 14 May 2015 23:42:39 +0000 (+1000) Subject: Grow: be more careful if array is stopped during critical section. X-Git-Tag: mdadm-3.3.3~54 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e0184a0cd0083f6fe3fc0395ab2b9b2909c8d882;p=thirdparty%2Fmdadm.git Grow: be more careful if array is stopped during critical section. In that case, updating 'completed' to 'max_progress' is wrong. Signed-off-by: NeilBrown --- diff --git a/Grow.c b/Grow.c index ec180784..99f34973 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);