diff options
author | Peter Rajnoha <prajnoha@redhat.com> | 2015-07-30 10:48:28 +0200 |
---|---|---|
committer | Peter Rajnoha <prajnoha@redhat.com> | 2015-07-30 10:50:05 +0200 |
commit | 42d13e8f17fcfca57df372dd6d30bb0277dbfb5b (patch) | |
tree | de11172fe042a376d83027ca4bd7471c78384dc1 | |
parent | 87d741a1fbaf9f6b576aa491f49f531c2cc0cd39 (diff) | |
download | lvm2-dev-prajnoha-avoid-some-init-for-simple-commands-v2.tar.gz |
-rw-r--r-- | lib/commands/toolcontext.c | 12 | ||||
-rw-r--r-- | lib/locking/locking.c | 5 | ||||
-rw-r--r-- | tools/commands.h | 20 | ||||
-rw-r--r-- | tools/lvmcmdline.c | 21 | ||||
-rw-r--r-- | tools/tools.h | 2 |
5 files changed, 41 insertions, 19 deletions
diff --git a/lib/commands/toolcontext.c b/lib/commands/toolcontext.c index f8d15e4d9..c087820f9 100644 --- a/lib/commands/toolcontext.c +++ b/lib/commands/toolcontext.c @@ -1887,12 +1887,12 @@ struct cmd_context *create_toolcontext(unsigned is_long_lived, _init_globals(cmd); - if (set_filters && !init_filters(cmd, 1)) - goto_out; - if (set_connections && !init_connections(cmd)) return_0; + if (set_filters && !init_filters(cmd, 1)) + goto_out; + cmd->default_settings.cache_vgmetadata = 1; cmd->current_settings = cmd->default_settings; @@ -1970,12 +1970,17 @@ static void _destroy_filters(struct cmd_context *cmd) cmd->full_filter->destroy(cmd->full_filter); cmd->lvmetad_filter = cmd->filter = cmd->full_filter = NULL; } + cmd->initialized.filters = 0; } int refresh_filters(struct cmd_context *cmd) { int r, saved_ignore_suspended_devices = ignore_suspended_devices(); + if (!cmd->initialized.filters) + /* if filters not initialized, there's nothing to refresh */ + return 1; + _destroy_filters(cmd); if (!(r = init_filters(cmd, 0))) stack; @@ -2175,6 +2180,7 @@ void destroy_toolcontext(struct cmd_context *cmd) lvmetad_release_token(); lvmetad_disconnect(); lvmpolld_disconnect(); + cmd->initialized.connections = 0; release_log_memory(); activation_exit(); diff --git a/lib/locking/locking.c b/lib/locking/locking.c index c88a85b82..22e83d2b1 100644 --- a/lib/locking/locking.c +++ b/lib/locking/locking.c @@ -119,8 +119,9 @@ int init_locking(int type, struct cmd_context *cmd, int suppress_messages) switch (type) { case 0: init_no_locking(&_locking, cmd, suppress_messages); - log_warn("WARNING: Locking disabled. Be careful! " - "This could corrupt your metadata."); + log_warn_suppress(suppress_messages, + "WARNING: Locking disabled. Be careful! " + "This could corrupt your metadata."); return 1; case 1: diff --git a/tools/commands.h b/tools/commands.h index 7f4b4e274..0ab578d4b 100644 --- a/tools/commands.h +++ b/tools/commands.h @@ -30,7 +30,7 @@ xx(e2fsadm, xx(config, "Display and manipulate configuration information", - PERMITTED_READ_ONLY, + PERMITTED_READ_ONLY | NO_METADATA_PROCESSING, "config\n" "\t[-f|--file filename]\n" "\t[--type {current|default|diff|full|list|missing|new|profilable|profilable-command|profilable-metadata}\n" @@ -60,7 +60,7 @@ xx(config, xx(devtypes, "Display recognised built-in block device types", - PERMITTED_READ_ONLY, + PERMITTED_READ_ONLY | NO_METADATA_PROCESSING, "devtypes\n" "\t[--aligned]\n" "\t[--binary]\n" @@ -86,7 +86,7 @@ xx(devtypes, xx(dumpconfig, "Display and manipulate configuration information", - PERMITTED_READ_ONLY, + PERMITTED_READ_ONLY | NO_METADATA_PROCESSING, "dumpconfig\n" "\t[-f|--file filename]\n" "\t[--type {current|default|diff|full|list|missing|new|profilable|profilable-command|profilable-metadata}\n" @@ -116,12 +116,12 @@ xx(dumpconfig, xx(formats, "List available metadata formats", - PERMITTED_READ_ONLY, + PERMITTED_READ_ONLY | NO_METADATA_PROCESSING, "formats\n") xx(help, "Display help for commands", - PERMITTED_READ_ONLY, + PERMITTED_READ_ONLY | NO_METADATA_PROCESSING, "help <command>\n") /********* @@ -491,7 +491,7 @@ xx(lvmchange, xx(lvmconfig, "Display and manipulate configuration information", - PERMITTED_READ_ONLY, + PERMITTED_READ_ONLY | NO_METADATA_PROCESSING, "lvmconfig\n" "\t[-f|--file filename]\n" "\t[--type {current|default|diff|full|list|missing|new|profilable|profilable-command|profilable-metadata}\n" @@ -979,17 +979,17 @@ xx(pvscan, xx(segtypes, "List available segment types", - PERMITTED_READ_ONLY, + PERMITTED_READ_ONLY | NO_METADATA_PROCESSING, "segtypes\n") xx(systemid, "Display the system ID, if any, currently set on this host", - PERMITTED_READ_ONLY, + PERMITTED_READ_ONLY | NO_METADATA_PROCESSING, "systemid\n") xx(tags, "List tags defined on this host", - PERMITTED_READ_ONLY, + PERMITTED_READ_ONLY | NO_METADATA_PROCESSING, "tags\n") xx(vgcfgbackup, @@ -1409,5 +1409,5 @@ xx(vgsplit, xx(version, "Display software and driver version information", - PERMITTED_READ_ONLY, + PERMITTED_READ_ONLY | NO_METADATA_PROCESSING, "version\n") diff --git a/tools/lvmcmdline.c b/tools/lvmcmdline.c index 0c88164a7..b7809c727 100644 --- a/tools/lvmcmdline.c +++ b/tools/lvmcmdline.c @@ -1463,6 +1463,11 @@ static int _init_lvmlockd(struct cmd_context *cmd) return 1; } +static int _cmd_no_meta_proc(struct cmd_context *cmd) +{ + return cmd->command->flags & NO_METADATA_PROCESSING; +} + int lvm_run_command(struct cmd_context *cmd, int argc, char **argv) { struct dm_config_tree *config_string_cft; @@ -1554,6 +1559,12 @@ int lvm_run_command(struct cmd_context *cmd, int argc, char **argv) if (!_prepare_profiles(cmd)) return_ECMD_FAILED; + if (!cmd->initialized.connections && !_cmd_no_meta_proc(cmd) && !init_connections(cmd)) + return_ECMD_FAILED; + + if (!cmd->initialized.filters && !_cmd_no_meta_proc(cmd) && !init_filters(cmd, 1)) + return_ECMD_FAILED; + if (arg_count(cmd, readonly_ARG)) cmd->metadata_read_only = 1; @@ -1587,7 +1598,9 @@ int lvm_run_command(struct cmd_context *cmd, int argc, char **argv) goto out; } - if (arg_count(cmd, readonly_ARG)) { + if (_cmd_no_meta_proc(cmd)) + locking_type = 0; + else if (arg_count(cmd, readonly_ARG)) { if (find_config_tree_bool(cmd, global_use_lvmlockd_CFG, NULL)) { /* * FIXME: we could use locking_type 5 here if that didn't @@ -1610,12 +1623,12 @@ int lvm_run_command(struct cmd_context *cmd, int argc, char **argv) else locking_type = -1; - if (!init_locking(locking_type, cmd, arg_count(cmd, sysinit_ARG))) { + if (!init_locking(locking_type, cmd, _cmd_no_meta_proc(cmd) || arg_count(cmd, sysinit_ARG))) { ret = ECMD_FAILED; goto_out; } - if (!_init_lvmlockd(cmd)) { + if (!_cmd_no_meta_proc(cmd) && !_init_lvmlockd(cmd)) { ret = ECMD_FAILED; goto_out; } @@ -2056,7 +2069,7 @@ int lvm2_main(int argc, char **argv) if (!alias && argc > 1 && !strcmp(argv[1], "version")) return lvm_return_code(version(NULL, argc, argv)); - if (!(cmd = init_lvm(1, 1))) + if (!(cmd = init_lvm(0, 0))) return -1; cmd->argv = argv; diff --git a/tools/tools.h b/tools/tools.h index 5ee5786d2..4ed893fc4 100644 --- a/tools/tools.h +++ b/tools/tools.h @@ -103,6 +103,8 @@ struct arg_value_group_list { #define ONE_VGNAME_ARG 0x00000010 /* Command needs a shared lock on a VG; it only reads the VG. */ #define LOCKD_VG_SH 0x00000020 +/* Command does not process any metadata. */ +#define NO_METADATA_PROCESSING 0x00000040 /* a register of the lvm commands */ struct command { |