From a3b831c9e167d1b7fd4f1ec371dc1b95ccf54a5d Mon Sep 17 00:00:00 2001 From: Mariusz Tkaczyk Date: Thu, 25 Jan 2018 15:12:50 +0100 Subject: [PATCH] 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 --- Grow.c | 5 +++++ 1 file changed, 5 insertions(+) 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"); -- 2.47.2