• NeilBrown's avatar
    md: remove check for MD_RECOVERY_NEEDED in action_store. · 312045ee
    NeilBrown authored
    md currently doesn't allow a 'sync_action' such as 'reshape' to be set
    while MD_RECOVERY_NEEDED is set.
    
    This s a problem, particularly since commit 738a2738 as that can
    cause ->check_shape to call mddev_resume() which sets
    MD_RECOVERY_NEEDED.  So by the time we come to start 'reshape' it is
    very likely that MD_RECOVERY_NEEDED is still set.
    
    Testing for this flag is not really needed and is in any case very
    racy as it can be set at any moment - asynchronously.  Any race
    between setting a sync_action and setting MD_RECOVERY_NEEDED must
    already be handled properly in some locked code, probably
    md_check_recovery(), so remove the test here.
    
    The test on MD_RECOVERY_RUNNING is also racy in the 'reshape' case
    so we should test it again after getting mddev_lock().
    
    As this fixes a race and a regression which can cause 'reshape' to
    fail, it is suitable for -stable kernels since 4.1
    Reported-by: default avatarXiao Ni <xni@redhat.com>
    Fixes: 738a2738 ("md/raid5: fix allocation of 'scribble' array.")
    Cc: stable@vger.kernel.org (v4.1+)
    Signed-off-by: default avatarNeilBrown <neilb@suse.com>
    312045ee
md.c 240 KB