[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