lkml.org 
[lkml]   [2019]   [May]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 109/114] md/raid: raid5 preserve the writeback action after the parity check
    Date
    From: Nigel Croxon <ncroxon@redhat.com>

    commit b2176a1dfb518d870ee073445d27055fea64dfb8 upstream.

    The problem is that any 'uptodate' vs 'disks' check is not precise
    in this path. Put a "WARN_ON(!test_bit(R5_UPTODATE, &dev->flags)" on the
    device that might try to kick off writes and then skip the action.
    Better to prevent the raid driver from taking unexpected action *and* keep
    the system alive vs killing the machine with BUG_ON.

    Note: fixed warning reported by kbuild test robot <lkp@intel.com>

    Signed-off-by: Dan Williams <dan.j.williams@intel.com>
    Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
    Signed-off-by: Song Liu <songliubraving@fb.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/md/raid5.c | 10 +++++++++-
    1 file changed, 9 insertions(+), 1 deletion(-)

    --- a/drivers/md/raid5.c
    +++ b/drivers/md/raid5.c
    @@ -4185,7 +4185,7 @@ static void handle_parity_checks6(struct
    /* now write out any block on a failed drive,
    * or P or Q if they were recomputed
    */
    - BUG_ON(s->uptodate < disks - 1); /* We don't need Q to recover */
    + dev = NULL;
    if (s->failed == 2) {
    dev = &sh->dev[s->failed_num[1]];
    s->locked++;
    @@ -4210,6 +4210,14 @@ static void handle_parity_checks6(struct
    set_bit(R5_LOCKED, &dev->flags);
    set_bit(R5_Wantwrite, &dev->flags);
    }
    + if (WARN_ONCE(dev && !test_bit(R5_UPTODATE, &dev->flags),
    + "%s: disk%td not up to date\n",
    + mdname(conf->mddev),
    + dev - (struct r5dev *) &sh->dev)) {
    + clear_bit(R5_LOCKED, &dev->flags);
    + clear_bit(R5_Wantwrite, &dev->flags);
    + s->locked--;
    + }
    clear_bit(STRIPE_DEGRADED, &sh->state);

    set_bit(STRIPE_INSYNC, &sh->state);

    \
     
     \ /
      Last update: 2019-05-23 21:23    [W:4.125 / U:0.196 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site