summaryrefslogtreecommitdiff
path: root/Grow.c
diff options
context:
space:
mode:
authorAdam Kwolek <adam.kwolek@intel.com>2011-03-10 08:30:42 +0100
committerNeilBrown <neilb@suse.de>2011-03-14 18:12:57 +1100
commitbcc9e9edd0669a1d99b77e38dc94ae8a644f4d36 (patch)
treea4c74b97d3809a86ff1068a563caf22112d62d17 /Grow.c
parentca6529edf6f7216003863a9ea847e6689693bd96 (diff)
FIX: Unfreeze array on success only
Unfreeze array on success only. rv is initialized by restart variable so we have 2 cases. 1. regular reshape start rv == restart == 0 this means that real error (returned by reshape) can cause leaving container frozen If array is not touched by reshape it can be unfrozen 2. During reshape restart even untouched array under reshape is left unfrozen, If reshape is started do not unfreeze array on error also. This allows user for array repair action (mdmon will not change array state). Signed-off-by: Adam Kwolek <adam.kwolek@intel.com> Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'Grow.c')
-rw-r--r--Grow.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/Grow.c b/Grow.c
index 9b4d5fbd..40e693ed 100644
--- a/Grow.c
+++ b/Grow.c
@@ -2205,6 +2205,7 @@ int reshape_container(char *container, char *devname,
int quiet, int restart)
{
struct mdinfo *cc = NULL;
+ int rv = restart;
/* component_size is not meaningful for a container,
* so pass '-1' meaning 'no change'
@@ -2249,7 +2250,6 @@ int reshape_container(char *container, char *devname,
* will take over the reshape.
*/
struct mdinfo *content;
- int rv;
int fd;
struct mdstat_ent *mdstat;
char *adev;
@@ -2292,7 +2292,8 @@ int reshape_container(char *container, char *devname,
if (rv)
break;
}
- unfreeze(st);
+ if (!rv)
+ unfreeze(st);
sysfs_free(cc);
exit(0);
}