FIX: restart reshape when reshape process is stopped just between 2 reshapes

When reshape is restarted from '0', very begin of array
it is possible that for external metadata reshape and array
configuration doesn't happen.
Check if md has the same opinion, and reshape is restarted
from 0. If so, this is regular reshape start after reshape
switch in metadata to next array only.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
Adam Kwolek 2012-02-09 12:37:40 +11:00 committed by NeilBrown
parent 51d83f5d11
commit e1dd332a09
1 changed files with 12 additions and 0 deletions

12
Grow.c
View File

@ -1980,6 +1980,18 @@ static int reshape_array(char *container, int fd, char *devname,
goto release;
}
if (st->ss->external && restart && (info->reshape_progress == 0)) {
/* When reshape is restarted from '0', very begin of array
* it is possible that for external metadata reshape and array
* configuration doesn't happen.
* Check if md has the same opinion, and reshape is restarted
* from 0. If so, this is regular reshape start after reshape
* switch in metadata to next array only.
*/
if ((verify_reshape_position(info, reshape.level) >= 0) &&
(info->reshape_progress == 0))
restart = 0;
}
if (restart) {
/* reshape already started. just skip to monitoring the reshape */
if (reshape.backup_blocks == 0)