lkml.org 
[lkml]   [2019]   [Sep]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.14 25/89] md: don't call spare_active in md_reap_sync_thread if all member devices can't work
    Date
    From: Guoqing Jiang <jgq516@gmail.com>

    [ Upstream commit 0d8ed0e9bf9643f27f4816dca61081784dedb38d ]

    When add one disk to array, the md_reap_sync_thread is responsible
    to activate the spare and set In_sync flag for the new member in
    spare_active().

    But if raid1 has one member disk A, and disk B is added to the array.
    Then we offline A before all the datas are synchronized from A to B,
    obviously B doesn't have the latest data as A, but B is still marked
    with In_sync flag.

    So let's not call spare_active under the condition, otherwise B is
    still showed with 'U' state which is not correct.

    Signed-off-by: Guoqing Jiang <guoqing.jiang@cloud.ionos.com>
    Signed-off-by: Song Liu <songliubraving@fb.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/md/md.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    diff --git a/drivers/md/md.c b/drivers/md/md.c
    index 764ed9c466294..d185725e100c0 100644
    --- a/drivers/md/md.c
    +++ b/drivers/md/md.c
    @@ -8906,7 +8906,8 @@ void md_reap_sync_thread(struct mddev *mddev)
    /* resync has finished, collect result */
    md_unregister_thread(&mddev->sync_thread);
    if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery) &&
    - !test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery)) {
    + !test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery) &&
    + mddev->degraded != mddev->raid_disks) {
    /* success...*/
    /* activate any spares */
    if (mddev->pers->spare_active(mddev)) {
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-09-22 21:13    [W:2.107 / U:0.376 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site