From 6d0c23083a2b9a357733568cd3042c39eb8922d1 Mon Sep 17 00:00:00 2001 From: David Teigland Date: Tue, 8 Aug 2006 17:06:07 -0500 Subject: [PATCH] --- yaml --- r: 38783 b: refs/heads/master c: f6db1b8e724b071d144055b48da3827ce26dba1c h: refs/heads/master i: 38781: e6c81d60df237957f1ecbf730029c2570f7d8eb5 38779: dfe268e8bb2f651dba23b1f4d9ad48abaee1b141 38775: e81eb3982eb6640ae7ce94eaa637052a91ce5ca9 38767: 7c93faf5cf24b43a0900723530a936e6ce59f148 38751: a6c440ef75f1149fd04de82b47b9d4fca6c290a3 38719: 6b1cf44aae1722b90857cc83af68278fd044c39b 38655: 7b8362b686c6a3a184389ece79fe97e0ecfdaf4d v: v3 --- [refs] | 2 +- trunk/fs/dlm/member.c | 24 +++++++++++++++++++----- trunk/fs/dlm/recoverd.c | 1 + 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 8eaf4c6d2b8d..8189d3848161 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5ff519112af6a6dab0ad7f6b0b0a2dcfff273e5b +refs/heads/master: f6db1b8e724b071d144055b48da3827ce26dba1c diff --git a/trunk/fs/dlm/member.c b/trunk/fs/dlm/member.c index cd0c51e724e0..ebb33c30f0f3 100644 --- a/trunk/fs/dlm/member.c +++ b/trunk/fs/dlm/member.c @@ -162,11 +162,22 @@ static void make_member_array(struct dlm_ls *ls) /* send a status request to all members just to establish comms connections */ -static void ping_members(struct dlm_ls *ls) +static int ping_members(struct dlm_ls *ls) { struct dlm_member *memb; - list_for_each_entry(memb, &ls->ls_nodes, list) - dlm_rcom_status(ls, memb->nodeid); + int error = 0; + + list_for_each_entry(memb, &ls->ls_nodes, list) { + error = dlm_recovery_stopped(ls); + if (error) + break; + error = dlm_rcom_status(ls, memb->nodeid); + if (error) + break; + } + if (error) + log_debug(ls, "ping_members aborted %d", error); + return error; } int dlm_recover_members(struct dlm_ls *ls, struct dlm_recover *rv, int *neg_out) @@ -212,10 +223,13 @@ int dlm_recover_members(struct dlm_ls *ls, struct dlm_recover *rv, int *neg_out) dlm_set_recover_status(ls, DLM_RS_NODES); *neg_out = neg; - ping_members(ls); + error = ping_members(ls); + if (error) + goto out; error = dlm_recover_members_wait(ls); - log_debug(ls, "total members %d", ls->ls_num_nodes); + out: + log_debug(ls, "total members %d error %d", ls->ls_num_nodes, error); return error; } diff --git a/trunk/fs/dlm/recoverd.c b/trunk/fs/dlm/recoverd.c index 70103533677d..eac8e9fa67f1 100644 --- a/trunk/fs/dlm/recoverd.c +++ b/trunk/fs/dlm/recoverd.c @@ -275,6 +275,7 @@ void dlm_recoverd_stop(struct dlm_ls *ls) void dlm_recoverd_suspend(struct dlm_ls *ls) { + wake_up(&ls->ls_wait_general); mutex_lock(&ls->ls_recoverd_active); }