lkml.org 
[lkml]   [2019]   [Oct]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.3 320/344] md/raid6: Set R5_ReadError when there is read failure on parity disk
    Date
    From: Xiao Ni <xni@redhat.com>

    commit 143f6e733b73051cd22dcb80951c6c929da413ce upstream.

    7471fb77ce4d ("md/raid6: Fix anomily when recovering a single device in
    RAID6.") avoids rereading P when it can be computed from other members.
    However, this misses the chance to re-write the right data to P. This
    patch sets R5_ReadError if the re-read fails.

    Also, when re-read is skipped, we also missed the chance to reset
    rdev->read_errors to 0. It can fail the disk when there are many read
    errors on P member disk (other disks don't have read error)

    V2: upper layer read request don't read parity/Q data. So there is no
    need to consider such situation.

    This is Reported-by: kbuild test robot <lkp@intel.com>

    Fixes: 7471fb77ce4d ("md/raid6: Fix anomily when recovering a single device in RAID6.")
    Cc: <stable@vger.kernel.org> #4.4+
    Signed-off-by: Xiao Ni <xni@redhat.com>
    Signed-off-by: Song Liu <songliubraving@fb.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

    --- a/drivers/md/raid5.c
    +++ b/drivers/md/raid5.c
    @@ -2559,7 +2559,9 @@ static void raid5_end_read_request(struc
    && !test_bit(R5_ReadNoMerge, &sh->dev[i].flags))
    retry = 1;
    if (retry)
    - if (test_bit(R5_ReadNoMerge, &sh->dev[i].flags)) {
    + if (sh->qd_idx >= 0 && sh->pd_idx == i)
    + set_bit(R5_ReadError, &sh->dev[i].flags);
    + else if (test_bit(R5_ReadNoMerge, &sh->dev[i].flags)) {
    set_bit(R5_ReadError, &sh->dev[i].flags);
    clear_bit(R5_ReadNoMerge, &sh->dev[i].flags);
    } else

    \
     
     \ /
      Last update: 2019-10-03 18:56    [W:4.034 / U:0.096 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site