diff options
-rw-r--r-- | WHATS_NEW | 1 | ||||
-rw-r--r-- | daemons/clvmd/clvmd-cman.c | 13 | ||||
-rw-r--r-- | daemons/clvmd/clvmd-command.c | 11 | ||||
-rw-r--r-- | daemons/clvmd/clvmd-corosync.c | 15 |
4 files changed, 24 insertions, 16 deletions
@@ -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"); |