[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

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



CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL4
Changes by:	jbrassow 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;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]