From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lars Marowsky-Bree Date: Mon, 10 Aug 2009 21:44:44 +0200 Subject: [Cluster-devel] [PATCH] libdlm: fix dlm_controld skipping lock spaces Message-ID: <20090810194444.GA15541@suse.de> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit With several lock spaces, there was a chance that poll_fencing, poll_quorum, or poll_fs were reset after the earlier lock spaces had been iterated over by process_lockspace_changes(). This would cause the earlier lock spaces to not be recovered, since process_lockspace_changes() would not be called again from the main loop. This fixes bugzilla.novell.com #528425. Acked-by: teigland at redhat.com Index: libdlm/group/dlm_controld/cpg.c =================================================================== --- libdlm.orig/group/dlm_controld/cpg.c +++ libdlm/group/dlm_controld/cpg.c @@ -653,26 +653,23 @@ static int wait_conditions_done(struct l just the latest change */ if (!check_fencing_done(ls)) { - poll_fencing = 1; + poll_fencing++; return 0; } - poll_fencing = 0; /* even though fencing also waits for quorum, checking fencing isn't sufficient because we don't want to start new lockspaces in an inquorate cluster */ if (!check_quorum_done(ls)) { - poll_quorum = 1; + poll_quorum++; return 0; } - poll_quorum = 0; if (!check_fs_done(ls)) { - poll_fs = 1; + poll_fs++; return 0; } - poll_fs = 0; return 1; } @@ -1168,6 +1165,9 @@ void process_lockspace_changes(void) { struct lockspace *ls, *safe; + poll_fencing = 0; + poll_quorum = 0; + poll_fs = 0; list_for_each_entry_safe(ls, safe, &lockspaces, list) { if (!list_empty(&ls->changes)) apply_changes(ls); -- Architect Storage/HA, OPS Engineering, Novell, Inc. SUSE LINUX Products GmbH, GF: Markus Rex, HRB 16746 (AG N?rnberg) "Experience is the name everyone gives to their mistakes." -- Oscar Wilde