summaryrefslogtreecommitdiffstats
path: root/daemons/clvmd
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2011-09-24 20:50:35 +0000
committerZdenek Kabelac <zkabelac@redhat.com>2011-09-24 20:50:35 +0000
commitd2c116058e72d365802eb5641be60a615daacb96 (patch)
tree359b704504241d4828199b2179f31c5a36dff199 /daemons/clvmd
parenta039e204e7263ba409218d4cc3fa407b12a111c1 (diff)
downloadlvm2-d2c116058e72d365802eb5641be60a615daacb96.tar.gz
lvm2-d2c116058e72d365802eb5641be60a615daacb96.tar.xz
lvm2-d2c116058e72d365802eb5641be60a615daacb96.zip
CLVMD support for LVM_CLVMD_BINARY and LVM_BINARY
Read 2 environmental vars to learn about overide position for CLVMD and LVM binaries. We support LVM_BINARY in other script - and this way we could easily test restart in our test-suite.
Diffstat (limited to 'daemons/clvmd')
-rw-r--r--daemons/clvmd/clvmd-command.c5
-rw-r--r--daemons/clvmd/lvm-functions.c19
2 files changed, 17 insertions, 7 deletions
diff --git a/daemons/clvmd/clvmd-command.c b/daemons/clvmd/clvmd-command.c
index 4ba71513..5857a30f 100644
--- a/daemons/clvmd/clvmd-command.c
+++ b/daemons/clvmd/clvmd-command.c
@@ -366,6 +366,7 @@ static int restart_clvmd(void)
int argc = 0, max_locks = 0;
struct dm_hash_node *hn = NULL;
char debug_arg[16];
+ const char *clvmd = getenv("LVM_CLVMD_BINARY") ? : CLVMD_PATH;
DEBUGLOG("clvmd restart requested\n");
@@ -415,11 +416,11 @@ static int restart_clvmd(void)
argv[argc] = NULL;
/* Exec new clvmd */
- DEBUGLOG("--- Restarting %s ---\n", CLVMD_PATH);
+ DEBUGLOG("--- Restarting %s ---\n", clvmd);
for (argc = 1; argv[argc]; argc++) DEBUGLOG("--- %d: %s\n", argc, argv[argc]);
/* NOTE: This will fail when downgrading! */
- execve(CLVMD_PATH, (char **)argv, NULL);
+ execve(clvmd, (char **)argv, NULL);
out:
/* We failed */
DEBUGLOG("Restart of clvmd failed.\n");
diff --git a/daemons/clvmd/lvm-functions.c b/daemons/clvmd/lvm-functions.c
index ba786bb0..f16d006c 100644
--- a/daemons/clvmd/lvm-functions.c
+++ b/daemons/clvmd/lvm-functions.c
@@ -704,14 +704,21 @@ static int get_initial_state(struct dm_hash_table *excl_uuid)
char lv[64], vg[64], flags[25], vg_flags[25];
char uuid[65];
char line[255];
- FILE *lvs =
- popen
- (LVM_PATH " lvs --config 'log{command_names=0 prefix=\"\"}' --nolocking --noheadings -o vg_uuid,lv_uuid,lv_attr,vg_attr",
- "r");
+ char *lvs_cmd;
+ const char *lvm_binary = getenv("LVM_BINARY") ? : LVM_PATH;
+ FILE *lvs;
- if (!lvs)
+ if (dm_asprintf(&lvs_cmd, "%s lvs --config 'log{command_names=0 prefix=\"\"}' "
+ "--nolocking --noheadings -o vg_uuid,lv_uuid,lv_attr,vg_attr",
+ lvm_binary) < 0)
return 0;
+ /* FIXME: Maybe link and use liblvm2cmd directly instead of fork */
+ if (!(lvs = popen(lvs_cmd, "r"))) {
+ dm_free(lvs_cmd);
+ return 0;
+ }
+
while (fgets(line, sizeof(line), lvs)) {
if (sscanf(line, "%s %s %s %s\n", vg, lv, flags, vg_flags) == 4) {
@@ -749,6 +756,8 @@ static int get_initial_state(struct dm_hash_table *excl_uuid)
if (fclose(lvs))
DEBUGLOG("lvs fclose failed: %s\n", strerror(errno));
+ dm_free(lvs_cmd);
+
return 1;
}