Grow.c: Block any level migration with chunk size change

Mixing level and chunk changes in one grow operation is not supported.
Mdadm performs level migration correctly and ignores new chunk, but
after migration it tries to write this chunk to sysfs properties.
This is dangerous and can cause unexpected behaviours.

Block it before level migration starts.

Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com>
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
This commit is contained in:
Mariusz Tkaczyk 2018-01-25 15:12:50 +01:00 committed by Jes Sorensen
parent 31b6f0cdc1
commit a3b831c9e1
1 changed files with 5 additions and 0 deletions

5
Grow.c
View File

@ -1794,6 +1794,11 @@ int Grow_reshape(char *devname, int fd,
devname);
return 1;
}
if (s->level != UnSet && s->chunk) {
pr_err("Cannot change array level in the same operation as changing chunk size.\n");
return 1;
}
if (data_offset != INVALID_SECTORS && array.level != 10 &&
(array.level < 4 || array.level > 6)) {
pr_err("--grow --data-offset not yet supported\n");