cluster: RHEL5 - clogd: Fix for bugs 474174 and 491340

Jonathan Brassow jbrassow@fedoraproject.org
Wed Jul 8 22:18:00 GMT 2009


Gitweb:        http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=c39f57ec2b16c5e98f3214f6ed0374ab455b8084
Commit:        c39f57ec2b16c5e98f3214f6ed0374ab455b8084
Parent:        8df780b532e02acef7f0ebc0113cf96515a7a3b6
Author:        Jonathan Brassow <jbrassow@redhat.com>
AuthorDate:    Wed Jul 8 17:16:19 2009 -0500
Committer:     Jonathan Brassow <jbrassow@redhat.com>
CommitterDate: Wed Jul 8 17:16:19 2009 -0500

clogd: Fix for bugs 474174 and 491340

Whether to continue mirror recovery or not was being queued
off of a variable that was set by doing (x - 1).  However,
when 'x' was 0 the result was a very large number (unsigned).
When this large number was compared against the number of
total regions in the mirror, it was determined that recovery
was finished.  The fix is simply to do:
	y = x ? (x - 1) : 0;
instead of:
	y = (x - 1);
---
 cmirror/src/functions.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/cmirror/src/functions.c b/cmirror/src/functions.c
index 0523e9c..3e0d15f 100644
--- a/cmirror/src/functions.c
+++ b/cmirror/src/functions.c
@@ -1518,9 +1518,9 @@ static int clog_is_remote_recovering(struct clog_tfr *tfr)
 		/*
 		 * Remember, 'lc->sync_search' is 1 plus the region
 		 * currently being recovered.  So, we must take off 1
-		 * to account for that.
+		 * to account for that - UNLESS sync_search IS 0!
 		 */
-		pkg->in_sync_hint = (lc->sync_search - 1);
+		pkg->in_sync_hint = lc->sync_search ? (lc->sync_search - 1) : 0;
 		LOG_DBG("[%s] Region is %s: %llu",
 			SHORT_UUID(lc->uuid),
 			(region == lc->recovering_region) ?



More information about the Cluster-cvs mailing list