[Cluster-devel] cluster/cmirror-kernel/src dm-cmirror-common.h ...

jbrassow at sourceware.org jbrassow at sourceware.org
Wed Feb 21 17:14:45 UTC 2007


CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL4
Changes by:	jbrassow at sourceware.org	2007-02-21 17:14:44

Modified files:
	cmirror-kernel/src: dm-cmirror-common.h dm-cmirror-server.c 

Log message:
	A previous fix that caused cluster mirrors to reattempt recovery to
	resolve intermittent drive failure, now causes indefinite retries
	during permenent drive failure.
	
	This can slow down the machine dramatically, especially if there are
	several mirrors active on the system that utilize the same failed
	drive.
	
	We now attempt one extra pass.  Further extra passes will require
	a reload of the mirror (as before).

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror-kernel/src/dm-cmirror-common.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.2.11&r2=1.1.2.12
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror-kernel/src/dm-cmirror-server.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.2.23&r2=1.1.2.24

--- cluster/cmirror-kernel/src/Attic/dm-cmirror-common.h	2007/02/14 17:44:07	1.1.2.11
+++ cluster/cmirror-kernel/src/Attic/dm-cmirror-common.h	2007/02/21 17:14:44	1.1.2.12
@@ -99,6 +99,7 @@
 	uint32_t *sync_bits;
 	uint32_t *recovering_bits;	/* FIXME: this seems excessive */
 
+	int sync_pass;          /* number of passes attempting to resync */
 	int sync_search;
 
 	/* Resync flag */
--- cluster/cmirror-kernel/src/Attic/dm-cmirror-server.c	2007/02/20 19:35:10	1.1.2.23
+++ cluster/cmirror-kernel/src/Attic/dm-cmirror-server.c	2007/02/21 17:14:44	1.1.2.24
@@ -229,8 +229,9 @@
 		 * FIXME: pvmove is not supported yet, but when it is,
 		 * an audit of sync_count changes will need to be made
 		 */
-		if (lc->sync_count < lc->region_count) {
+		if ((lc->sync_count < lc->region_count) && !lc->sync_pass) {
 			lc->sync_search = 0;
+			lc->sync_pass++;
 		} else {
 			return 0;
 		}
@@ -1029,7 +1030,6 @@
 	return 0;
 }
 
-
 static int cluster_log_serverd(void *data){
 	int error;
 	struct log_c *lc;




More information about the Cluster-devel mailing list