diff options
author | Zdenek Kabelac <zkabelac@redhat.com> | 2011-09-24 20:50:35 +0000 |
---|---|---|
committer | Zdenek Kabelac <zkabelac@redhat.com> | 2011-09-24 20:50:35 +0000 |
commit | d2c116058e72d365802eb5641be60a615daacb96 (patch) | |
tree | 359b704504241d4828199b2179f31c5a36dff199 /daemons | |
parent | a039e204e7263ba409218d4cc3fa407b12a111c1 (diff) | |
download | lvm2-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')
-rw-r--r-- | daemons/clvmd/clvmd-command.c | 5 | ||||
-rw-r--r-- | daemons/clvmd/lvm-functions.c | 19 |
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; } |