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

jbrassow at sourceware.org jbrassow at sourceware.org
Wed Jun 21 21:21:02 UTC 2006


CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL4U4
Changes by:	jbrassow at sourceware.org	2006-06-21 21:20:59

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

Log message:
	- fix for bug 195610 (renaming a clustered mirror is broken)
	
	The problem is that LVM2/device-mapper calls the mirror constructor
	before calling the destructor.  This results in two copies of the
	log context to exist in the cluster mirror.
	
	I've added code to detect and handle this, but it should probably
	also be fixed in LVM2/device-mapper.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror-kernel/src/dm-cmirror-server.c.diff?cvsroot=cluster&only_with_tag=RHEL4U4&r1=1.1.2.9&r2=1.1.2.9.2.1

--- cluster/cmirror-kernel/src/Attic/dm-cmirror-server.c	2006/06/14 22:14:55	1.1.2.9
+++ cluster/cmirror-kernel/src/Attic/dm-cmirror-server.c	2006/06/21 21:20:59	1.1.2.9.2.1
@@ -298,7 +298,6 @@
 	DMINFO("Disk Resume::");
 
 	debug_disk_write = 1;
-
 	memset(live_nodes, 0, sizeof(live_nodes));
 	for(i = 0; i < global_count; i++){
 		live_nodes[global_nodeids[i]/8] |= 1 << (global_nodeids[i]%8);
@@ -612,15 +611,19 @@
 
 
 static struct log_c *get_log_context(char *uuid){
-	struct log_c *lc;
+	struct log_c *lc, *r = NULL;
 
 	list_for_each_entry(lc, &log_list_head, log_list){
 		if(!strncmp(lc->uuid, uuid, MAX_NAME_LEN)){
-			return lc;
+			if (r)
+				DMERR("HEY!!! There are two matches for %s",
+				      lc->uuid + (strlen(lc->uuid) - 8));
+			else
+				r = lc;
 		}
 	}
 
-	return NULL;
+	return r;
 }
 
 




More information about the Cluster-devel mailing list