]> git.baikalelectronics.ru Git - kernel.git/commit
md/raid10: fix that replacement cannot complete recovery after reassemble
authorBingJing Chang <bingjingc@synology.com>
Thu, 28 Jun 2018 10:40:11 +0000 (18:40 +0800)
committerShaohua Li <shli@fb.com>
Thu, 28 Jun 2018 20:04:49 +0000 (13:04 -0700)
commitc7bdea97bac24bd42ab5b75aad793ddc4c420659
tree3173d0034e81cd77c4f55bc929bec4d1eb5a0250
parent1d2944d0cfc340416919d35465f1dbf0b2593302
md/raid10: fix that replacement cannot complete recovery after reassemble

During assemble, the spare marked for replacement is not checked.
conf->fullsync cannot be updated to be 1. As a result, recovery will
treat it as a clean array. All recovering sectors are skipped. Original
device is replaced with the not-recovered spare.

mdadm -C /dev/md0 -l10 -n4 -pn2 /dev/loop[0123]
mdadm /dev/md0 -a /dev/loop4
mdadm /dev/md0 --replace /dev/loop0
mdadm -S /dev/md0 # stop array during recovery

mdadm -A /dev/md0 /dev/loop[01234]

After reassemble, you can see recovery go on, but it completes
immediately. In fact, recovery is not actually processed.

To solve this problem, we just add the missing logics for replacment
spares. (In raid1.c or raid5.c, they have already been checked.)

Reported-by: Alex Chen <alexchen@synology.com>
Reviewed-by: Alex Wu <alexwu@synology.com>
Reviewed-by: Chung-Chiang Cheng <cccheng@synology.com>
Signed-off-by: BingJing Chang <bingjingc@synology.com>
Signed-off-by: Shaohua Li <shli@fb.com>
drivers/md/raid10.c