From 608254716de61e94760aefdc0163bbf685144220 Mon Sep 17 00:00:00 2001 From: Jonathan Brassow Date: Jun 21 2006 21:20:59 +0000 Subject: - 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. --- diff --git a/cmirror-kernel/src/dm-cmirror-server.c b/cmirror-kernel/src/dm-cmirror-server.c index e455801..6420b85 100644 --- a/cmirror-kernel/src/dm-cmirror-server.c +++ b/cmirror-kernel/src/dm-cmirror-server.c @@ -298,7 +298,6 @@ static int disk_resume(struct log_c *lc) 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 int server_get_sync_count(struct log_c *lc, struct log_request *lr){ 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; }