From: Mariusz Tkaczyk Date: Thu, 25 Jan 2018 14:12:50 +0000 (+0100) Subject: Grow.c: Block any level migration with chunk size change X-Git-Tag: mdadm-4.1-rc1~30 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a3b831c9;p=thirdparty%2Fmdadm.git 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 Signed-off-by: Jes Sorensen --- diff --git a/Grow.c b/Grow.c index 3ee015b7..87229692 100644 --- a/Grow.c +++ b/Grow.c @@ -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");