]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Grow.c: Block any level migration with chunk size change
authorMariusz Tkaczyk <mariusz.tkaczyk@intel.com>
Thu, 25 Jan 2018 14:12:50 +0000 (15:12 +0100)
committerJes Sorensen <jsorensen@fb.com>
Thu, 25 Jan 2018 19:31:47 +0000 (14:31 -0500)
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>
Grow.c

diff --git a/Grow.c b/Grow.c
index 3ee015b7d20e136c162b765b0f19f96bb1baf552..8722969234233d15537cca1baa94da83b5592e7b 100644 (file)
--- 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");