• Xue jiufei's avatar
    ocfs2: dlm_request_all_locks() should deal with the status sent from target node · 98ac9125
    Xue jiufei authored
    dlm_request_all_locks() should deal with the status sent from target node
    if DLM_LOCK_REQUEST_MSG is sent successfully, or recovery master will fall
    into endless loop, waiting for other nodes to send locks and
    DLM_RECO_DATA_DONE_MSG to me.
    
            NodeA                                  NodeB
                                         selected as recovery master
                                         dlm_remaster_locks()
                                         ->dlm_request_all_locks()
                                         send DLM_LOCK_REQUEST_MSG to nodeA
    
    It happened that NodeA cannot alloc memory when it processes this
    message.  dlm_request_all_locks_handler() do not queue
    dlm_request_all_locks_worker and returns -ENOMEM.  It will never send
    locks and DLM_RECO_DATA_DONE_MSG to NodeB.
    
                                        NodeB do not deal with the status
                                        sent from nodeA, and will fall in
                                        endless loop waiting for the
                                        recovery state of NodeA to be
                                        changed.
    Signed-off-by: default avatarjoyce <xuejiufei@huawei.com>
    Cc: Mark Fasheh <mfasheh@suse.com>
    Cc: Jeff Liu <jeff.liu@oracle.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    98ac9125
dlmrecovery.c 85 KB