From: Alasdair Kergon Date: Thu, 8 Dec 2011 21:24:08 +0000 (+0000) Subject: Only use built-in stack size in clvmd - ignore lvm.conf. X-Git-Tag: old-v2_02_89~142 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=721119a388c45f6a84dc43cd8a1ebb8dee141b22;p=lvm2.git Only use built-in stack size in clvmd - ignore lvm.conf. --- diff --git a/WHATS_NEW b/WHATS_NEW index 670865705..10011f58a 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -47,7 +47,7 @@ Version 2.02.89 - Fix lv_info open_count test for disabled verify_udev_operations (2.02.86). Simplify code for lvm worker thread in clvmd. Use pthread_barrier to synchronize clvmd threads at startup. - Limit clvmd's thread size to 128KiB. + Limit clvmd's thread size to 128KiB and ignore activation/reserved_stack. Reduce default preallocated stack size to 64KiB. Add check for access through NULL pointer when refresh_filter() fails. Use pthread condition for SINGLENODE lock implementation. diff --git a/daemons/clvmd/lvm-functions.c b/daemons/clvmd/lvm-functions.c index 273245fed..9f11d22a7 100644 --- a/daemons/clvmd/lvm-functions.c +++ b/daemons/clvmd/lvm-functions.c @@ -880,7 +880,7 @@ int init_clvm(struct dm_hash_table *excl_uuid) if (!get_initial_state(excl_uuid)) log_error("Cannot load initial lock states."); - if (!(cmd = create_toolcontext(1, NULL, 0))) { + if (!(cmd = create_toolcontext(1, NULL, 0, 1))) { log_error("Failed to allocate command context"); return 0; } diff --git a/daemons/lvmetad/testclient.c b/daemons/lvmetad/testclient.c index f5b5cf397..c4cf7c582 100644 --- a/daemons/lvmetad/testclient.c +++ b/daemons/lvmetad/testclient.c @@ -108,7 +108,7 @@ int main(int argc, char **argv) { if (argc > 1) { int i; - struct cmd_context *cmd = create_toolcontext(0, NULL, 0); + struct cmd_context *cmd = create_toolcontext(0, NULL, 0, 0); for (i = 1; i < argc; ++i) { const char *uuid = NULL; scan(h, argv[i]); diff --git a/lib/commands/toolcontext.c b/lib/commands/toolcontext.c index 0bbbc3585..c64df84b7 100644 --- a/lib/commands/toolcontext.c +++ b/lib/commands/toolcontext.c @@ -1224,7 +1224,8 @@ static void _init_globals(struct cmd_context *cmd) /* Entry point */ struct cmd_context *create_toolcontext(unsigned is_long_lived, const char *system_dir, - unsigned set_buffering) + unsigned set_buffering, + unsigned threaded) { struct cmd_context *cmd; @@ -1246,6 +1247,7 @@ struct cmd_context *create_toolcontext(unsigned is_long_lived, return NULL; } cmd->is_long_lived = is_long_lived; + cmd->threaded = threaded ? 1 : 0; cmd->handles_missing_pvs = 0; cmd->handles_unknown_segments = 0; cmd->independent_metadata_areas = 0; diff --git a/lib/commands/toolcontext.h b/lib/commands/toolcontext.h index 143a9a0e6..6fba68692 100644 --- a/lib/commands/toolcontext.h +++ b/lib/commands/toolcontext.h @@ -85,6 +85,7 @@ struct cmd_context { unsigned partial_activation:1; unsigned si_unit_consistency:1; unsigned metadata_read_only:1; + unsigned threaded:1; /* Set if running within a thread e.g. clvmd */ unsigned independent_metadata_areas:1; /* Active formats have MDAs outside PVs */ @@ -117,7 +118,8 @@ struct cmd_context { */ struct cmd_context *create_toolcontext(unsigned is_long_lived, const char *system_dir, - unsigned set_buffering); + unsigned set_buffering, + unsigned threaded); void destroy_toolcontext(struct cmd_context *cmd); int refresh_toolcontext(struct cmd_context *cmd); int refresh_filters(struct cmd_context *cmd); diff --git a/lib/mm/memlock.c b/lib/mm/memlock.c index 8bf9f22d8..3ef407b75 100644 --- a/lib/mm/memlock.c +++ b/lib/mm/memlock.c @@ -445,9 +445,10 @@ void memlock_dec_daemon(struct cmd_context *cmd) void memlock_init(struct cmd_context *cmd) { - _size_stack = find_config_tree_int(cmd, - "activation/reserved_stack", - DEFAULT_RESERVED_STACK) * 1024; + /* When threaded, caller already limited stack size so just use the default. */ + _size_stack = 1024 * (cmd->threaded ? DEFAULT_RESERVED_STACK : + find_config_tree_int(cmd, "activation/reserved_stack", + DEFAULT_RESERVED_STACK)); _size_malloc_tmp = find_config_tree_int(cmd, "activation/reserved_memory", DEFAULT_RESERVED_MEMORY) * 1024; diff --git a/liblvm/lvm_base.c b/liblvm/lvm_base.c index 998444897..599c859a3 100644 --- a/liblvm/lvm_base.c +++ b/liblvm/lvm_base.c @@ -37,7 +37,7 @@ lvm_t lvm_init(const char *system_dir) /* create context */ /* FIXME: split create_toolcontext */ /* FIXME: make all globals configurable */ - cmd = create_toolcontext(0, system_dir, 1); + cmd = create_toolcontext(0, system_dir, 1, 0); if (!cmd) return NULL; diff --git a/tools/lvmcmdline.c b/tools/lvmcmdline.c index 1dab59d5c..4bcf7bbaf 100644 --- a/tools/lvmcmdline.c +++ b/tools/lvmcmdline.c @@ -1237,7 +1237,7 @@ struct cmd_context *init_lvm(void) if (!udev_init_library_context()) stack; - if (!(cmd = create_toolcontext(0, NULL, 1))) + if (!(cmd = create_toolcontext(0, NULL, 1, 0))) return_NULL; _cmdline.arg_props = &_arg_props[0];