diff --git a/Makefile.in b/Makefile.in index e07d6074f..af63fc5d9 100644 --- a/Makefile.in +++ b/Makefile.in @@ -37,7 +37,7 @@ endif include make.tmpl -daemons: lib tools +daemons: lib lib: include tools: lib po: tools daemons diff --git a/WHATS_NEW b/WHATS_NEW index 8a16e0ed8..84e620ad0 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -4,7 +4,6 @@ Version 2.01.04 - Remove unused -f from pvmove. Gulm clvmd doesn't report "connection refused" errors. clvmd does a basic config file sanity check at startup. - clvmd now uses liblvm2cmd to preload the lock state rather than popen Version 2.01.03 - 1st February 2005 =================================== diff --git a/configure b/configure index c0a8906cc..7a6cff5d6 100755 --- a/configure +++ b/configure @@ -7413,8 +7413,7 @@ fi; echo "$as_me:$LINENO: result: $CMDLIB" >&5 echo "${ECHO_T}$CMDLIB" >&6 -if test x$CMDLIB = xyes -o x$CLVMD != none; then - CMDLIB="yes" +if test x$CMDLIB = xyes; then CFLAGS="$CFLAGS -DCMDLIB" fi diff --git a/configure.in b/configure.in index 332dbd7bd..02ae9b891 100644 --- a/configure.in +++ b/configure.in @@ -344,8 +344,7 @@ AC_ARG_ENABLE(cmdlib, [ --enable-cmdlib Build shared command library], CMDLIB=$enableval, CMDLIB=no) AC_MSG_RESULT($CMDLIB) -if test x$CMDLIB = xyes -o x$CLVMD != none; then - CMDLIB="yes" +if test x$CMDLIB = xyes; then CFLAGS="$CFLAGS -DCMDLIB" fi diff --git a/daemons/clvmd/Makefile.in b/daemons/clvmd/Makefile.in index 81dd3fc4f..7ffd51569 100644 --- a/daemons/clvmd/Makefile.in +++ b/daemons/clvmd/Makefile.in @@ -52,7 +52,7 @@ TARGETS = \ include $(top_srcdir)/make.tmpl CFLAGS += -D_REENTRANT -fno-strict-aliasing -LIBS += -L../../tools -ldevmapper -llvm -Wl,-Bstatic -llvm2cmd -Wl,-Bdynamic -lpthread +LIBS += -ldevmapper -llvm -lpthread INSTALL_TARGETS = \ install_clvmd diff --git a/daemons/clvmd/lvm-functions.c b/daemons/clvmd/lvm-functions.c index 59bdedd8e..61bb084ff 100644 --- a/daemons/clvmd/lvm-functions.c +++ b/daemons/clvmd/lvm-functions.c @@ -43,7 +43,6 @@ #include "activate.h" #include "hash.h" #include "locking.h" -#include "../tools/lvm2cmd.h" static struct cmd_context *cmd = NULL; static struct hash_table *lv_hash = NULL; @@ -389,19 +388,29 @@ int do_check_lvm1(char *vgname) return status == 1 ? 0 : EBUSY; } -static void cmdline_output(int level, const char *file, int line, - const char *message) +/* + * Ideally, clvmd should be started before any LVs are active + * but this may not be the case... + * I suppose this also comes in handy if clvmd crashes, not that it would! + */ +static void *get_initial_state() { - DEBUGLOG("lvm2output: %d: %s\n", level, message); - if (level == LVM2_LOG_PRINT) - { - char lv[64], vg[64], flags[25]; - char uuid[65]; + char lv[64], vg[64], flags[25]; + char uuid[65]; + char line[255]; + FILE *lvs = + popen + ("lvm lvs --nolocking --noheadings -o vg_uuid,lv_uuid,lv_attr", + "r"); - if (sscanf(message, "%s %s %s\n", vg, lv, flags) == 3) { + if (!lvs) + return NULL; + + while (fgets(line, sizeof(line), lvs)) { + if (sscanf(line, "%s %s %s\n", vg, lv, flags) == 3) { /* States: s:suspended a:active S:dropped snapshot I:invalid snapshot */ - if (strlen(vg) == 38 && /* is is a valid UUID ? */ + if (strlen(vg) == 38 && /* is is a valid UUID ? */ (flags[4] == 'a' || flags[4] == 's')) { /* is it active or suspended? */ /* Convert hyphen-separated UUIDs into one */ memcpy(&uuid[0], &vg[0], 6); @@ -425,32 +434,8 @@ static void cmdline_output(int level, const char *file, int line, } } } -} - -/* - * Ideally, clvmd should be started before any LVs are active - * but this may not be the case... - * I suppose this also comes in handy if clvmd crashes, not that it would! - */ -static void get_initial_state() -{ - void *lvm2_handle; - - lvm2_handle = lvm2_init(); - if (!lvm2_handle) { - syslog(LOG_ERR, "Cannot get lvm2 context to initialise lock state\n"); - return; - } - - lvm2_log_fn(cmdline_output); - - /* This doesn't seem to do what I think it does */ - lvm2_log_level(lvm2_handle, LVM2_LOG_PRINT); - - DEBUGLOG("Getting currently active LVs for lock state\n"); - lvm2_run(lvm2_handle, "lvs --nolocking --noheadings -o vg_uuid,lv_uuid,lv_attr"); - - lvm2_exit(lvm2_handle); + fclose(lvs); + return NULL; } /* This checks some basic cluster-LVM configuration stuff */