]> git.ipfire.org Git - thirdparty/mdadm.git/commit
mdadm: prevent out-of-date reshaping devices from force assemble
authorBingJing Chang <bingjingc@synology.com>
Thu, 22 Feb 2018 07:00:28 +0000 (15:00 +0800)
committerJes Sorensen <jsorensen@fb.com>
Fri, 23 Feb 2018 16:05:00 +0000 (11:05 -0500)
commit62f1aee7ada5e752bda0448b2003a64b31cad5af
tree1bee9348f52d7e5e8c143765bee8d90670607e64
parent8b75124792b0c765a49c6ced1ca174a4d8b4aabb
mdadm: prevent out-of-date reshaping devices from force assemble

With "--force", we can assemble the array even if some superblocks
appear out-of-date. But their data layout is regarded to make sense.
In reshape cases, if two devices claims different reshape progresses,
we cannot forcely assemble them back to array. Kernel will treat only
one of them as reshape progress. However, their data is still laid on
different layouts. It may lead to disaster if reshape goes on.

Reproducible Steps:
mdadm -C /dev/md0 --assume-clean -l5 -n3 /dev/loop[012]
mdadm -a /dev/md0 /dev/loop3
mdadm -G /dev/md0 -n4
mdadm -f /dev/md0 /dev/loop0 # after a period
mdadm -S /dev/md0 # after another period
mdadm -E /dev/loop[01] # make sure that they claims different ones

mdadm -Af -R /dev/md0 /dev/loop[023] # give no enough devices for
force_array() to pick non-fresh devices
cat /sys/block/md0/md/reshape_position # You can see that Kernel resume
reshape the from any progress of them.

Note: The unit of mdadm -E is KB, but reshape_position's is sector.

In order to prevent disaster, we add logics to prevent devices with
different reshape progress from being added into the array.

Reported-by: Allen Peng <allenpeng@synology.com>
Reviewed-by: Alex Wu <alexwu@synology.com>
Signed-off-by: BingJing Chang <bingjingc@synology.com>
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
Assemble.c