diff options
author | Xue jiufei <xuejiufei@huawei.com> | 2013-09-11 23:19:46 +0200 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-12 00:56:31 +0200 |
commit | 98ac9125c5afed8c5d2e4c5824988f8ad51814e1 (patch) | |
tree | 123fa8641217bf5891caa2179146ec0a54de0dbd /fs/ocfs2/localalloc.c | |
parent | ocfs2: use i_size_read() to access i_size (diff) | |
download | linux-98ac9125c5afed8c5d2e4c5824988f8ad51814e1.tar.xz linux-98ac9125c5afed8c5d2e4c5824988f8ad51814e1.zip |
ocfs2: dlm_request_all_locks() should deal with the status sent from target node
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: joyce <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: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/ocfs2/localalloc.c')
0 files changed, 0 insertions, 0 deletions