On 9/10/19 5:45 PM, Song Liu wrote:
On Sep 10, 2019, at 12:33 AM, NeilBrown <neilb@xxxxxxx> wrote:
On Mon, Sep 09 2019, Song Liu wrote:
Hi Neil,
On Sep 9, 2019, at 7:57 AM, NeilBrown <neilb@xxxxxxx> wrote:
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@xxxxxxxxxxxxxxx (3.14+)
Signed-off-by: NeilBrown <neilb@xxxxxxx>
Thanks for the patches. They look great. However, I am having problem
apply them (not sure whether it is a problem on my side). Could you
please push it somewhere so I can use cherry-pick instead?
I rebased them on block/for-next, fixed the problems that Guoqing found,
and pushed them to
https://github.com/neilbrown/linux md/raid0
NeilBrown
Thanks Neil!
Thanks for the explanation about set the flag.
Guoqing, if this looks good, please reply with your Reviewed-by
or Acked-by.
No more comments from my side, but I am not sure if it is better/possible to use one
sysfs node to control the behavior instead of module parameter, then we can support
different raid0 layout dynamically.
Anyway, Acked-by: Guoqing Jiang <guoqing.jiang@xxxxxxxxxxxxxxx>
Thanks,
Guoqing