• Guoqing Jiang's avatar
    md-cluster/raid10: support add disk under grow mode · 7564beda
    Guoqing Jiang authored
    For clustered raid10 scenario, we need to let all the nodes
    know about that a new disk is added to the array, and the
    reshape caused by add new member just need to be happened in
    one node, but other nodes should know about the change.
    
    Since reshape means read data from somewhere (which is already
    used by array) and write data to unused region. Obviously, it
    is awful if one node is reading data from address while another
    node is writing to the same address. Considering we have
    implemented suspend writes in the resyncing area, so we can
    just broadcast the reading address to other nodes to avoid the
    trouble.
    
    For master node, it would call reshape_request then update sb
    during the reshape period. To avoid above trouble, we call
    resync_info_update to send RESYNC message in reshape_request.
    
    Then from slave node's view, it receives two type messages:
    1. RESYNCING message
    Slave node add the address (where master node reading data from)
    to suspend list.
    
    2. METADATA_UPDATED message
    Once slave nodes know the reshaping is started in master node,
    it is time to update reshape position and call start_reshape to
    follow master node's step. After reshape is done, only reshape
    position is need to be updated, so the majority task of reshaping
    is happened on the master node.
    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>
    7564beda
raid10.c 137 KB