summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--WHATS_NEW1
-rw-r--r--daemons/clvmd/clvmd-cman.c13
-rw-r--r--daemons/clvmd/clvmd-command.c11
-rw-r--r--daemons/clvmd/clvmd-corosync.c15
4 files changed, 24 insertions, 16 deletions
diff --git a/WHATS_NEW b/WHATS_NEW
index b6cdb7fe..2dd3ddad 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,6 +1,7 @@
Version 2.02.82 -
===================================
Add -f (don't fork) option to clvmd and fix clvmd -d<num> description.
+ Fix possible clvmd DLM lockspace increasing reference count.
Version 2.02.81 - 17th January 2011
===================================
diff --git a/daemons/clvmd/clvmd-cman.c b/daemons/clvmd/clvmd-cman.c
index 52da2acb..c7a2b2d7 100644
--- a/daemons/clvmd/clvmd-cman.c
+++ b/daemons/clvmd/clvmd-cman.c
@@ -89,16 +89,17 @@ static int _init_cluster(void)
DEBUGLOG("CMAN initialisation complete\n");
/* Create a lockspace for LV & VG locks to live in */
- lockspace = dlm_create_lockspace(LOCKSPACE_NAME, 0600);
+ lockspace = dlm_open_lockspace(LOCKSPACE_NAME);
if (!lockspace) {
- if (errno == EEXIST) {
- lockspace = dlm_open_lockspace(LOCKSPACE_NAME);
- }
+ lockspace = dlm_create_lockspace(LOCKSPACE_NAME, 0600);
if (!lockspace) {
- syslog(LOG_ERR, "Unable to create lockspace for CLVM: %m");
+ syslog(LOG_ERR, "Unable to create DLM lockspace for CLVM: %m");
return -1;
}
- }
+ DEBUGLOG("Created DLM lockspace for CLVMD.\n");
+ } else
+ DEBUGLOG("Opened existing DLM lockspace for CLVMD.\n");
+
dlm_ls_pthread_init(lockspace);
DEBUGLOG("DLM initialisation complete\n");
return 0;
diff --git a/daemons/clvmd/clvmd-command.c b/daemons/clvmd/clvmd-command.c
index 2576dcfc..38727021 100644
--- a/daemons/clvmd/clvmd-command.c
+++ b/daemons/clvmd/clvmd-command.c
@@ -147,7 +147,7 @@ int do_command(struct local_client *client, struct clvm_header *msg, int msglen,
break;
case CLVMD_CMD_RESTART:
- restart_clvmd();
+ status = restart_clvmd();
break;
case CLVMD_CMD_GET_CLUSTERNAME:
@@ -382,8 +382,14 @@ static int restart_clvmd(void)
dm_snprintf(debug_arg, 16, "-d%d", (int)clvmd_get_debug()) < 0)
goto_out;
argv[argc++] = debug_arg;
+ debug_arg = NULL;
}
+ /*
+ * FIXME: specify used cluster backend
+ * argv[argc++] = strdup("-Isinglenode");
+ */
+
/* Now add the exclusively-open LVs */
do {
hn = get_next_excl_lock(hn, &lv_name);
@@ -402,6 +408,7 @@ static int restart_clvmd(void)
argv[argc++] = NULL;
/* Exec new clvmd */
+ DEBUGLOG("--- Restarting %s ---\n", CLVMD_PATH);
/* NOTE: This will fail when downgrading! */
execve(CLVMD_PATH, argv, NULL);
out:
@@ -413,5 +420,5 @@ out:
free(argv);
free(debug_arg);
- return 0;
+ return EIO;
}
diff --git a/daemons/clvmd/clvmd-corosync.c b/daemons/clvmd/clvmd-corosync.c
index cfe71502..01ee09ff 100644
--- a/daemons/clvmd/clvmd-corosync.c
+++ b/daemons/clvmd/clvmd-corosync.c
@@ -294,19 +294,18 @@ static int _init_cluster(void)
return cs_to_errno(err);
}
-
/* Create a lockspace for LV & VG locks to live in */
- lockspace = dlm_create_lockspace(LOCKSPACE_NAME, 0600);
+ lockspace = dlm_open_lockspace(LOCKSPACE_NAME);
if (!lockspace) {
- if (errno == EEXIST) {
- lockspace = dlm_open_lockspace(LOCKSPACE_NAME);
- }
+ lockspace = dlm_create_lockspace(LOCKSPACE_NAME, 0600);
if (!lockspace) {
- syslog(LOG_ERR, "Unable to create lockspace for CLVM: %m");
- quorum_finalize(quorum_handle);
+ syslog(LOG_ERR, "Unable to create DLM lockspace for CLVM: %m");
return -1;
}
- }
+ DEBUGLOG("Created DLM lockspace for CLVMD.\n");
+ } else
+ DEBUGLOG("Opened existing DLM lockspace for CLVMD.\n");
+
dlm_ls_pthread_init(lockspace);
DEBUGLOG("DLM initialisation complete\n");