• NeilBrown's avatar
    md/raid6: Fix anomily when recovering a single device in RAID6. · 7471fb77
    NeilBrown authored
    When recoverying a single missing/failed device in a RAID6,
    those stripes where the Q block is on the missing device are
    handled a bit differently.  In these cases it is easy to
    check that the P block is correct, so we do.  This results
    in the P block be destroy.  Consequently the P block needs
    to be read a second time in order to compute Q.  This causes
    lots of seeks and hurts performance.
    
    It shouldn't be necessary to re-read P as it can be computed
    from the DATA.  But we only compute blocks on missing
    devices, since c337869d ("md: do not compute parity
    unless it is on a failed drive").
    
    So relax the change made in that commit to allow computing
    of the P block in a RAID6 which it is the only missing that
    block.
    
    This makes RAID6 recovery run much faster as the disk just
    "before" the recovering device is no longer seeking
    back-and-forth.
    Reported-by-tested-by: default avatarBrad Campbell <lists2009@fnarfbargle.com>
    Reviewed-by: default avatarDan Williams <dan.j.williams@intel.com>
    Signed-off-by: default avatarNeilBrown <neilb@suse.com>
    Signed-off-by: default avatarShaohua Li <shli@fb.com>
    7471fb77
raid5.c 238 KB