• NeilBrown's avatar
    md/raid0: avoid RAID0 data corruption due to layout confusion. · c84a1372
    NeilBrown authored
    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: 20d0189b ("block: Introduce new bio_split()")
    cc: stable@vger.kernel.org (3.14+)
    Acked-by: default avatarGuoqing Jiang <guoqing.jiang@cloud.ionos.com>
    Signed-off-by: default avatarNeilBrown <neilb@suse.de>
    Signed-off-by: default avatarSong Liu <songliubraving@fb.com>
    c84a1372
raid0.c 21.9 KB