Date: Monday, May 30, 2016 @ 21:33:11
  Author: eworm
Revision: 268754

upgpkg: lvm2 2.02.154-3

apply 'liblvm: allow config settings to be read without full lvm cmd' FS#49483

Added:
  lvm2/trunk/01-lvm2-make-sockets-static.patch
    (from rev 268753, lvm2/trunk/lvm2-make-sockets-static.patch)
  lvm2/trunk/02-liblvm_config_settings.patch
  lvm2/trunk/03-lvm2_activation_generator.patch
    (from rev 268753, lvm2/trunk/lvm2_activation_generator.patch)
Modified:
  lvm2/trunk/PKGBUILD
Deleted:
  lvm2/trunk/lvm2-make-sockets-static.patch
  lvm2/trunk/lvm2_activation_generator.patch

------------------------------------+
 01-lvm2-make-sockets-static.patch  |   20 +++++
 02-liblvm_config_settings.patch    |  134 +++++++++++++++++++++++++++++++++++
 03-lvm2_activation_generator.patch |   43 +++++++++++
 PKGBUILD                           |   15 ++-
 lvm2-make-sockets-static.patch     |   20 -----
 lvm2_activation_generator.patch    |   43 -----------
 6 files changed, 206 insertions(+), 69 deletions(-)

Copied: lvm2/trunk/01-lvm2-make-sockets-static.patch (from rev 268753, 
lvm2/trunk/lvm2-make-sockets-static.patch)
===================================================================
--- 01-lvm2-make-sockets-static.patch                           (rev 0)
+++ 01-lvm2-make-sockets-static.patch   2016-05-30 19:33:11 UTC (rev 268754)
@@ -0,0 +1,20 @@
+diff -Nur LVM2.2.02.106.orig/scripts/dm_event_systemd_red_hat.socket.in 
LVM2.2.02.106/scripts/dm_event_systemd_red_hat.socket.in
+--- LVM2.2.02.106.orig/scripts/dm_event_systemd_red_hat.socket.in      
2014-04-10 17:38:46.000000000 +0200
++++ LVM2.2.02.106/scripts/dm_event_systemd_red_hat.socket.in   2014-04-26 
14:21:10.097269315 +0200
+@@ -8,6 +8,3 @@
+ ListenFIFO=@DEFAULT_DM_RUN_DIR@/dmeventd-client
+ SocketMode=0600
+ RemoveOnStop=true
+-
+-[Install]
+-WantedBy=sockets.target
+diff -Nur LVM2.2.02.106.orig/scripts/lvm2_lvmetad_systemd_red_hat.socket.in 
LVM2.2.02.106/scripts/lvm2_lvmetad_systemd_red_hat.socket.in
+--- LVM2.2.02.106.orig/scripts/lvm2_lvmetad_systemd_red_hat.socket.in  
2014-04-10 17:38:46.000000000 +0200
++++ LVM2.2.02.106/scripts/lvm2_lvmetad_systemd_red_hat.socket.in       
2014-04-26 14:21:15.287156152 +0200
+@@ -7,6 +7,3 @@
+ ListenStream=@DEFAULT_RUN_DIR@/lvmetad.socket
+ SocketMode=0600
+ RemoveOnStop=true
+-
+-[Install]
+-WantedBy=sysinit.target

Added: 02-liblvm_config_settings.patch
===================================================================
--- 02-liblvm_config_settings.patch                             (rev 0)
+++ 02-liblvm_config_settings.patch     2016-05-30 19:33:11 UTC (rev 268754)
@@ -0,0 +1,134 @@
+From 7fd4119d24eee55323e888dd78c70257d7c97a15 Mon Sep 17 00:00:00 2001
+From: David Teigland <[email protected]>
+Date: Tue, 17 May 2016 11:54:13 -0500
+Subject: liblvm: allow config settings to be read without full lvm cmd
+
+A program may be using liblvm2app for simply checking a config
+setting in lvm.conf.  In this case, a full lvm context is not
+needed, only cmd->cft (which are the config settings read from
+lvm.conf).
+
+lvm_config_find_bool() can now be passed a NULL lvm context
+in which case it will only create cmd->cft, check the config
+setting asked for, and destroy the cmd.
+---
+ lib/commands/toolcontext.c | 43 +++++++++++++++++++++++++++++++++++++++++++
+ lib/commands/toolcontext.h |  8 ++++++++
+ liblvm/lvm_base.c          | 23 ++++++++++++++++++++---
+ 3 files changed, 71 insertions(+), 3 deletions(-)
+
+diff --git a/lib/commands/toolcontext.c b/lib/commands/toolcontext.c
+index 90e5d5a..1e3f14a 100644
+--- a/lib/commands/toolcontext.c
++++ b/lib/commands/toolcontext.c
+@@ -1776,6 +1776,49 @@ bad:
+       return 0;
+ }
+ 
++void destroy_config_context(struct cmd_context *cmd)
++{
++      _destroy_config(cmd);
++
++      if (cmd->mem)
++              dm_pool_destroy(cmd->mem);
++      if (cmd->libmem)
++              dm_pool_destroy(cmd->libmem);
++
++      dm_free(cmd);
++}
++
++/*
++ * A "config context" is a very light weight toolcontext that
++ * is only used for reading config settings from lvm.conf.
++ */
++struct cmd_context *create_config_context(void)
++{
++      struct cmd_context *cmd;
++
++      if (!(cmd = dm_zalloc(sizeof(*cmd))))
++              goto_out;
++
++      strcpy(cmd->system_dir, DEFAULT_SYS_DIR);
++
++      if (!_get_env_vars(cmd))
++              goto_out;
++
++      if (!(cmd->libmem = dm_pool_create("library", 4 * 1024)))
++              goto_out;
++
++      dm_list_init(&cmd->config_files);
++
++      if (!_init_lvm_conf(cmd))
++              goto_out;
++
++      return cmd;
++out:
++      if (cmd)
++              destroy_config_context(cmd);
++      return NULL;
++}
++
+ /* Entry point */
+ struct cmd_context *create_toolcontext(unsigned is_long_lived,
+                                      const char *system_dir,
+diff --git a/lib/commands/toolcontext.h b/lib/commands/toolcontext.h
+index c3b9b2e..2cecf27 100644
+--- a/lib/commands/toolcontext.h
++++ b/lib/commands/toolcontext.h
+@@ -218,6 +218,14 @@ int init_lvmcache_orphans(struct cmd_context *cmd);
+ int init_filters(struct cmd_context *cmd, unsigned load_persistent_cache);
+ int init_connections(struct cmd_context *cmd);
+ 
++/*
++ * A config context is a very light weight cmd struct that
++ * is only used for reading config settings from lvm.conf,
++ * which are at cmd->cft.
++ */
++struct cmd_context *create_config_context(void);
++void destroy_config_context(struct cmd_context *cmd);
++
+ struct format_type *get_format_by_name(struct cmd_context *cmd, const char 
*format);
+ 
+ const char *system_id_from_string(struct cmd_context *cmd, const char *str);
+diff --git a/liblvm/lvm_base.c b/liblvm/lvm_base.c
+index 8b4def2..fce994c 100644
+--- a/liblvm/lvm_base.c
++++ b/liblvm/lvm_base.c
+@@ -126,14 +126,31 @@ int lvm_config_override(lvm_t libh, const char 
*config_settings)
+       return rc;
+ }
+ 
++/*
++ * When full lvm connection is not being used, libh can be NULL
++ * and this command will internally create a single-use, light-weight
++ * cmd struct that only has cmd->cft populated from lvm.conf.
++ */
+ int lvm_config_find_bool(lvm_t libh, const char *config_path, int fail)
+ {
+       int rc = 0;
+-      struct cmd_context *cmd = (struct cmd_context *)libh;
+-      struct saved_env e = store_user_env((struct cmd_context *)libh);
++      struct cmd_context *cmd;
++      struct saved_env e;
++
++      if (libh) {
++              cmd = (struct cmd_context *)libh;
++              e = store_user_env((struct cmd_context *)libh);
++      } else {
++              if (!(cmd = create_config_context()))
++                      return 0;
++      }
+ 
+       rc = dm_config_tree_find_bool(cmd->cft, config_path, fail);
+-      restore_user_env(&e);
++
++      if (libh)
++              restore_user_env(&e);
++      else
++              destroy_config_context(cmd);
+       return rc;
+ }
+ 
+-- 
+cgit v0.12-38-g4150
+

Copied: lvm2/trunk/03-lvm2_activation_generator.patch (from rev 268753, 
lvm2/trunk/lvm2_activation_generator.patch)
===================================================================
--- 03-lvm2_activation_generator.patch                          (rev 0)
+++ 03-lvm2_activation_generator.patch  2016-05-30 19:33:11 UTC (rev 268754)
@@ -0,0 +1,43 @@
+From 591ef307b30c2d828b2a0c59918203f970974bbb Mon Sep 17 00:00:00 2001
+From: David Teigland <[email protected]>
+Date: Tue, 17 May 2016 12:03:25 -0500
+Subject: lvm2_activation_generator: don't create full context for liblvm2app
+
+Don't use lvm_init() to create a full command context, which
+does a lot of command setup (like connecting to daemons), which
+is unnecessary for simply reading a value from lvm.conf.
+
+Passing a NULL context arg to the lvm_config_ function is now
+allowed, in which case lvm.conf is read without doing lvm
+command setup.
+---
+ scripts/lvm2_activation_generator_systemd_red_hat.c | 12 +++---------
+ 1 file changed, 3 insertions(+), 9 deletions(-)
+
+diff --git a/scripts/lvm2_activation_generator_systemd_red_hat.c 
b/scripts/lvm2_activation_generator_systemd_red_hat.c
+index 62467bd..d83e721 100644
+--- a/scripts/lvm2_activation_generator_systemd_red_hat.c
++++ b/scripts/lvm2_activation_generator_systemd_red_hat.c
+@@ -69,16 +69,10 @@ static void kmsg(int log_level, const char *format, ...)
+ 
+ static void lvm_get_use_lvmetad_and_lvmpolld(int *use_lvmetad, int 
*use_lvmpolld)
+ {
+-      lvm_t lvm;
+-
+       *use_lvmetad = *use_lvmpolld = 0;
+-      if (!(lvm = lvm_init(NULL))) {
+-              kmsg(LOG_ERR, "LVM: Failed to initialize library context for 
activation generator.\n");
+-              return;
+-      }
+-      *use_lvmetad = lvm_config_find_bool(lvm, LVM_CONF_USE_LVMETAD, 0);
+-      *use_lvmpolld = lvm_config_find_bool(lvm, LVM_CONF_USE_LVMPOLLD, 0);
+-      lvm_quit(lvm);
++
++      *use_lvmetad = lvm_config_find_bool(NULL, LVM_CONF_USE_LVMETAD, 0);
++      *use_lvmpolld = lvm_config_find_bool(NULL, LVM_CONF_USE_LVMPOLLD, 0);
+ }
+ 
+ static int register_unit_with_target(const char *dir, const char *unit, const 
char *target)
+-- 
+cgit v0.12-38-g4150
+

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2016-05-30 18:38:19 UTC (rev 268753)
+++ PKGBUILD    2016-05-30 19:33:11 UTC (rev 268754)
@@ -5,7 +5,7 @@
 pkgbase=lvm2
 pkgname=('lvm2' 'device-mapper')
 pkgver=2.02.154
-pkgrel=2
+pkgrel=3
 arch=('i686' 'x86_64')
 url="http://sourceware.org/lvm2/";
 license=('GPL2' 'LGPL2.1')
@@ -16,8 +16,9 @@
         lvm2_hook
         sd-lvm2_install
         11-dm-initramfs.rules
-        lvm2-make-sockets-static.patch
-       lvm2_activation_generator.patch)
+        01-lvm2-make-sockets-static.patch
+        02-liblvm_config_settings.patch
+        03-lvm2_activation_generator.patch)
 sha1sums=('6b594f2b23e85bf5bf74a4c4a75817e84e5a0853'
           'SKIP'
           '056bb0227d07e35a3d365db02f439585314cfc76'
@@ -25,6 +26,7 @@
           'f6ac78163ab3aba5b51a71655d6e53d05014bfa4'
           'f6a554eea9557c3c236df2943bb6e7e723945c41'
           'b084512af42f2e16cdccd8b7ee4de27b574d1f94'
+          '6e1b0e34f66db7414413194c828aa9bb9629dc81'
           '8f9804c11a09086f4954a3b8a19623e004b40b02')
 validpgpkeys=('88437EF5C077BD113D3B7224228191C1567E2C17')
 
@@ -35,10 +37,11 @@
   sed -i 's|use_lvmetad = 0|use_lvmetad = 1|' conf/example.conf.in
 
   # make systemd sockets static
-  patch -p1 -i "${srcdir}/lvm2-make-sockets-static.patch"
+  patch -p1 -i "${srcdir}/01-lvm2-make-sockets-static.patch"
 
-  # lvm2_activation_generator: don't create full context for liblvm2app
-  patch -p1 -i "${srcdir}/lvm2_activation_generator.patch"
+  # FS#49483: [lvm2] lvm2-activation-generator wrongly syncs on ipc
+  patch -p1 -i "${srcdir}/02-liblvm_config_settings.patch"
+  patch -p1 -i "${srcdir}/03-lvm2_activation_generator.patch"
 }
 
 build() {

Deleted: lvm2-make-sockets-static.patch
===================================================================
--- lvm2-make-sockets-static.patch      2016-05-30 18:38:19 UTC (rev 268753)
+++ lvm2-make-sockets-static.patch      2016-05-30 19:33:11 UTC (rev 268754)
@@ -1,20 +0,0 @@
-diff -Nur LVM2.2.02.106.orig/scripts/dm_event_systemd_red_hat.socket.in 
LVM2.2.02.106/scripts/dm_event_systemd_red_hat.socket.in
---- LVM2.2.02.106.orig/scripts/dm_event_systemd_red_hat.socket.in      
2014-04-10 17:38:46.000000000 +0200
-+++ LVM2.2.02.106/scripts/dm_event_systemd_red_hat.socket.in   2014-04-26 
14:21:10.097269315 +0200
-@@ -8,6 +8,3 @@
- ListenFIFO=@DEFAULT_DM_RUN_DIR@/dmeventd-client
- SocketMode=0600
- RemoveOnStop=true
--
--[Install]
--WantedBy=sockets.target
-diff -Nur LVM2.2.02.106.orig/scripts/lvm2_lvmetad_systemd_red_hat.socket.in 
LVM2.2.02.106/scripts/lvm2_lvmetad_systemd_red_hat.socket.in
---- LVM2.2.02.106.orig/scripts/lvm2_lvmetad_systemd_red_hat.socket.in  
2014-04-10 17:38:46.000000000 +0200
-+++ LVM2.2.02.106/scripts/lvm2_lvmetad_systemd_red_hat.socket.in       
2014-04-26 14:21:15.287156152 +0200
-@@ -7,6 +7,3 @@
- ListenStream=@DEFAULT_RUN_DIR@/lvmetad.socket
- SocketMode=0600
- RemoveOnStop=true
--
--[Install]
--WantedBy=sysinit.target

Deleted: lvm2_activation_generator.patch
===================================================================
--- lvm2_activation_generator.patch     2016-05-30 18:38:19 UTC (rev 268753)
+++ lvm2_activation_generator.patch     2016-05-30 19:33:11 UTC (rev 268754)
@@ -1,43 +0,0 @@
-From 591ef307b30c2d828b2a0c59918203f970974bbb Mon Sep 17 00:00:00 2001
-From: David Teigland <[email protected]>
-Date: Tue, 17 May 2016 12:03:25 -0500
-Subject: lvm2_activation_generator: don't create full context for liblvm2app
-
-Don't use lvm_init() to create a full command context, which
-does a lot of command setup (like connecting to daemons), which
-is unnecessary for simply reading a value from lvm.conf.
-
-Passing a NULL context arg to the lvm_config_ function is now
-allowed, in which case lvm.conf is read without doing lvm
-command setup.
----
- scripts/lvm2_activation_generator_systemd_red_hat.c | 12 +++---------
- 1 file changed, 3 insertions(+), 9 deletions(-)
-
-diff --git a/scripts/lvm2_activation_generator_systemd_red_hat.c 
b/scripts/lvm2_activation_generator_systemd_red_hat.c
-index 62467bd..d83e721 100644
---- a/scripts/lvm2_activation_generator_systemd_red_hat.c
-+++ b/scripts/lvm2_activation_generator_systemd_red_hat.c
-@@ -69,16 +69,10 @@ static void kmsg(int log_level, const char *format, ...)
- 
- static void lvm_get_use_lvmetad_and_lvmpolld(int *use_lvmetad, int 
*use_lvmpolld)
- {
--      lvm_t lvm;
--
-       *use_lvmetad = *use_lvmpolld = 0;
--      if (!(lvm = lvm_init(NULL))) {
--              kmsg(LOG_ERR, "LVM: Failed to initialize library context for 
activation generator.\n");
--              return;
--      }
--      *use_lvmetad = lvm_config_find_bool(lvm, LVM_CONF_USE_LVMETAD, 0);
--      *use_lvmpolld = lvm_config_find_bool(lvm, LVM_CONF_USE_LVMPOLLD, 0);
--      lvm_quit(lvm);
-+
-+      *use_lvmetad = lvm_config_find_bool(NULL, LVM_CONF_USE_LVMETAD, 0);
-+      *use_lvmpolld = lvm_config_find_bool(NULL, LVM_CONF_USE_LVMPOLLD, 0);
- }
- 
- static int register_unit_with_target(const char *dir, const char *unit, const 
char *target)
--- 
-cgit v0.12-38-g4150
-

Reply via email to