• Guoqing Jiang's avatar
    md-cluster: gather resync infos and enable recv_thread after bitmap is ready · 51e453ae
    Guoqing Jiang authored
    The in-memory bitmap is not ready when node joins cluster,
    so it doesn't make sense to make gather_all_resync_info()
    called so earlier, we need to call it after the node's
    bitmap is setup. Also, recv_thread could be wake up after
    node joins cluster, but it could cause problem if node
    receives RESYNCING message without persionality since
    mddev->pers->quiesce is called in process_suspend_info.
    
    This commit introduces a new cluster interface load_bitmaps
    to fix above problems, load_bitmaps is called in bitmap_load
    where bitmap and persionality are ready, and load_bitmaps
    does the following tasks:
    
    1. call gather_all_resync_info to load all the node's
       bitmap info.
    2. set MD_CLUSTER_ALREADY_IN_CLUSTER bit to recv_thread
       could be wake up, and wake up recv_thread if there is
       pending recv event.
    
    Then ack_bast only wakes up recv_thread after IN_CLUSTER
    bit is ready otherwise MD_CLUSTER_PENDING_RESYNC_EVENT is
    set.
    Reviewed-by: default avatarNeilBrown <neilb@suse.com>
    Signed-off-by: default avatarGuoqing Jiang <gqjiang@suse.com>
    Signed-off-by: default avatarShaohua Li <shli@fb.com>
    51e453ae
bitmap.c 66.5 KB