• Guoqing Jiang's avatar
    md-cluster: Use a small window for raid10 resync · 8db87912
    Guoqing Jiang authored
    Suspending the entire device for resync could take
    too long. Resync in small chunks.
    
    cluster's resync window is maintained in r10conf as
    cluster_sync_low and cluster_sync_high, and processed
    in raid10's sync_request(). If the current resync is
    outside the cluster resync window:
    
    1. Set the cluster_sync_low to curr_resync_completed.
    2. Set cluster_sync_high to cluster_sync_low + stripe
       size.
    3. Send a message to all nodes so they may add it in
       their suspension list.
    
    Note:
    We only support "near" raid10 so far, resync a far or
    offset raid10 array could have trouble. So raid10_run
    checks the layout of clustered raid10, it will refuse
    to run if the layout is not correct.
    
    With the "near" layout we process one stripe at a time
    progressing monotonically through the address space.
    So we can have a sliding window of whole-stripes which
    moves through the array suspending IO on other nodes,
    and both resync which uses array addresses and recovery
    which uses device addresses can stay within this window.
    Signed-off-by: default avatarGuoqing Jiang <gqjiang@suse.com>
    Signed-off-by: default avatarShaohua Li <shli@fb.com>
    8db87912
raid10.c 135 KB