[Cluster-devel] cluster/cmirror-kernel/src dm-cmirror-client.c ...

jbrassow at sourceware.org jbrassow at sourceware.org
Mon Feb 19 16:29:44 UTC 2007


CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL4
Changes by:	jbrassow at sourceware.org	2007-02-19 16:29:43

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

Log message:
	Bug 228070: DLM assertion when running GFS I/O during cmirror leg failure
	
	When a log server drops out of the cluster, it ignores any requests -
	forcing the clients to retry.  Unfortunately, the clients never ran
	another election - causing operations to stall.  The server now replies
	that it cannot handle the requests, which causes proper initiation of
	elections.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror-kernel/src/dm-cmirror-client.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.2.36&r2=1.1.2.37
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.21&r2=1.1.2.22

--- cluster/cmirror-kernel/src/Attic/dm-cmirror-client.c	2007/02/14 17:44:07	1.1.2.36
+++ cluster/cmirror-kernel/src/Attic/dm-cmirror-client.c	2007/02/19 16:29:42	1.1.2.37
@@ -1058,6 +1058,10 @@
 
 	rtn = consult_server(lc, 0, LRT_GET_RESYNC_WORK, region);
 
+	if (*region > lc->region_count) {
+		DMWARN("Error while getting resync work: bad region");
+		rtn = 0;
+	}
 	return rtn;
 }
 
--- cluster/cmirror-kernel/src/Attic/dm-cmirror-server.c	2007/02/14 17:44:07	1.1.2.21
+++ cluster/cmirror-kernel/src/Attic/dm-cmirror-server.c	2007/02/19 16:29:42	1.1.2.22
@@ -938,7 +938,7 @@
 		case LRT_MARK_REGION:
 			if(!(nodeid = 
 			     ipaddr_to_nodeid((struct sockaddr *)msg.msg_name))){
-				return -EINVAL;
+				error = -ENXIO;
 				break;
 			}
 			error = server_mark_region(lc, &lr, nodeid);
@@ -947,7 +947,7 @@
 		case LRT_CLEAR_REGION:
 			if(!(nodeid = 
 			     ipaddr_to_nodeid((struct sockaddr *)msg.msg_name))){
-				return -EINVAL;
+				error = -ENXIO;
 				break;
 			}
 			error = server_clear_region(lc, &lr, nodeid);
@@ -955,7 +955,7 @@
 		case LRT_GET_RESYNC_WORK:
 			if(!(nodeid = 
 			     ipaddr_to_nodeid((struct sockaddr *)msg.msg_name))){
-				return -EINVAL;
+				error = -ENXIO;
 				break;
 			}
 			error = server_get_resync_work(lc, &lr, nodeid);




More information about the Cluster-devel mailing list