From c816fc41a5033298f44dc255466353c064af5dae Mon Sep 17 00:00:00 2001 From: David Teigland Date: Tue, 31 Oct 2006 11:56:01 -0600 Subject: [PATCH] --- yaml --- r: 43286 b: refs/heads/master c: 91c0dc93a1a6bbdd79707ed311e48b4397df177f h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/dlm/member.c | 8 ++++++++ trunk/fs/dlm/recoverd.c | 7 +++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 6247ec2fc937..eda7e1458cbc 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d4400156d415540086c34a06e5d233122d6bf56a +refs/heads/master: 91c0dc93a1a6bbdd79707ed311e48b4397df177f diff --git a/trunk/fs/dlm/member.c b/trunk/fs/dlm/member.c index a3f7de7f3a8f..85e2897bd740 100644 --- a/trunk/fs/dlm/member.c +++ b/trunk/fs/dlm/member.c @@ -186,6 +186,14 @@ int dlm_recover_members(struct dlm_ls *ls, struct dlm_recover *rv, int *neg_out) struct dlm_member *memb, *safe; int i, error, found, pos = 0, neg = 0, low = -1; + /* previously removed members that we've not finished removing need to + count as a negative change so the "neg" recovery steps will happen */ + + list_for_each_entry(memb, &ls->ls_nodes_gone, list) { + log_debug(ls, "prev removed member %d", memb->nodeid); + neg++; + } + /* move departed members from ls_nodes to ls_nodes_gone */ list_for_each_entry_safe(memb, safe, &ls->ls_nodes, list) { diff --git a/trunk/fs/dlm/recoverd.c b/trunk/fs/dlm/recoverd.c index 362e3eff4dc9..4a1d6023fd9b 100644 --- a/trunk/fs/dlm/recoverd.c +++ b/trunk/fs/dlm/recoverd.c @@ -164,6 +164,13 @@ static int ls_recover(struct dlm_ls *ls, struct dlm_recover *rv) */ dlm_recover_rsbs(ls); + } else { + /* + * Other lockspace members may be going through the "neg" steps + * while also adding us to the lockspace, in which case they'll + * be looking for this status bit during dlm_recover_locks(). + */ + dlm_set_recover_status(ls, DLM_RS_LOCKS); } dlm_release_root_list(ls);