]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commit
md/raid0: avoid RAID0 data corruption due to layout confusion.
authorNeilBrown <neilb@suse.de>
Mon, 9 Sep 2019 06:30:02 +0000 (16:30 +1000)
committerSong Liu <songliubraving@fb.com>
Fri, 13 Sep 2019 20:10:05 +0000 (13:10 -0700)
commitc84a1372df929033cb1a0441fb57bd3932f39ac9
tree25d1dfda789f506f6af96b793eb6ae16caf3198c
parent6ce220dd2f8ea71d6afc29b9a7524c12e39f374a
md/raid0: avoid RAID0 data corruption due to layout confusion.

If the drives in a RAID0 are not all the same size, the array is
divided into zones.
The first zone covers all drives, to the size of the smallest.
The second zone covers all drives larger than the smallest, up to
the size of the second smallest - etc.

A change in Linux 3.14 unintentionally changed the layout for the
second and subsequent zones.  All the correct data is still stored, but
each chunk may be assigned to a different device than in pre-3.14 kernels.
This can lead to data corruption.

It is not possible to determine what layout to use - it depends which
kernel the data was written by.
So we add a module parameter to allow the old (0) or new (1) layout to be
specified, and refused to assemble an affected array if that parameter is
not set.

Fixes: 20d0189b1012 ("block: Introduce new bio_split()")
cc: stable@vger.kernel.org (3.14+)
Acked-by: Guoqing Jiang <guoqing.jiang@cloud.ionos.com>
Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Song Liu <songliubraving@fb.com>
drivers/md/raid0.c
drivers/md/raid0.h