• NeilBrown's avatar
    md/raid0: update queue parameter in a safer location. · f2cbb1bf
    NeilBrown authored
    commit 199dc6ed upstream.
    
    When a (e.g.) RAID5 array is reshaped to RAID0, the updating
    of queue parameters (e.g. max number of sectors per bio) is
    done in the wrong place.
    It should be part of ->run, but it is actually part of ->takeover.
    This means it happens before level_store() calls:
    
    	blk_set_stacking_limits(&mddev->queue->limits);
    
    and so it ineffective.  This can lead to errors from underlying
    devices.
    
    So move all the relevant settings out of create_stripe_zones()
    and into raid0_run().
    
    As this can lead to a bug-on it is suitable for any -stable
    kernel which supports reshape to RAID0.  So 2.6.35 or later.
    As the bug has been present for five years there is no urgency,
    so no need to rush into -stable.
    
    Fixes: 9af204cf ("md: Add support for Raid5->Raid0 and Raid10->Raid0 takeover")
    Reported-by: default avatarYi Zhang <yizhan@redhat.com>
    Signed-off-by: default avatarNeilBrown <neilb@suse.com>
    [ luis: backported to 3.16:
      - raid0 isn't accessed from dm-raid so no conditional mddev->queue accesses
        (done with commit 753f2856 "md raid0: access mddev->queue (request
        queue member) conditionally because it is not set when accessed from
        dm-raid")
      - adjusted context ]
    Signed-off-by: default avatarLuis Henriques <luis.henriques@canonical.com>
    f2cbb1bf
raid0.c 20.1 KB