diff options
author | Kurt Hackel <kurt.hackel@oracle.com> | 2006-01-18 20:05:38 -0500 |
---|---|---|
committer | Mark Fasheh <mark.fasheh@oracle.com> | 2006-02-16 15:01:38 -0500 |
commit | 44465a7daf7c4e34199b2b0ebb3c5101619dcb9d (patch) | |
tree | ec10b2c1a93a41b16abeb1535c25944c628b447c /fs/ocfs2/dlm/dlmlock.c | |
parent | e2b5e4506f5c5187b91d7a79fbad28fe3ebd2fc5 (diff) |
[PATCH] ocfs2: add dlm_wait_for_node_death
* add dlm_wait_for_node_death function to be used after receiving a network
error. this will wait for the given timeout to allow the heartbeat
callbacks to update the domain map. without this, some paths may spin
and consume enough cpu that the heartbeat gets starved and never updates.
Signed-off-by: Kurt Hackel <kurt.hackel@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
Diffstat (limited to 'fs/ocfs2/dlm/dlmlock.c')
-rw-r--r-- | fs/ocfs2/dlm/dlmlock.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/fs/ocfs2/dlm/dlmlock.c b/fs/ocfs2/dlm/dlmlock.c index d1a0038557a3..e709412e6e32 100644 --- a/fs/ocfs2/dlm/dlmlock.c +++ b/fs/ocfs2/dlm/dlmlock.c | |||
@@ -646,7 +646,19 @@ retry_lock: | |||
646 | mlog(0, "retrying lock with migration/" | 646 | mlog(0, "retrying lock with migration/" |
647 | "recovery/in progress\n"); | 647 | "recovery/in progress\n"); |
648 | msleep(100); | 648 | msleep(100); |
649 | dlm_wait_for_recovery(dlm); | 649 | /* no waiting for dlm_reco_thread */ |
650 | if (recovery) { | ||
651 | if (status == DLM_RECOVERING) { | ||
652 | mlog(0, "%s: got RECOVERING " | ||
653 | "for $REOCVERY lock, master " | ||
654 | "was %u\n", dlm->name, | ||
655 | res->owner); | ||
656 | dlm_wait_for_node_death(dlm, res->owner, | ||
657 | DLM_NODE_DEATH_WAIT_MAX); | ||
658 | } | ||
659 | } else { | ||
660 | dlm_wait_for_recovery(dlm); | ||
661 | } | ||
650 | goto retry_lock; | 662 | goto retry_lock; |
651 | } | 663 | } |
652 | 664 | ||