From 2cba93e2828583d1065c031bd493bc2ec9d7c82c Mon Sep 17 00:00:00 2001 From: Peter Rajnoha Date: Fri, 24 Jul 2015 12:29:19 +0200 Subject: commands: add NO_METADATA_PROCESSING command flag Mark commands that do not handle LVM metadata with the new NO_METADATA_PROCESSING flag: - lvmconfig (config, dumpconfig) - devtypes - formats - segtypes - systemid - tags - version Recognize this flag during command/context initialization and skip init for lvmetad, lvmpolld, lvmlockd and switch to using "no locking" (locking_type=0) for such commands. --- lib/locking/locking.c | 5 +++-- tools/commands.h | 20 ++++++++++---------- tools/lvmcmdline.c | 13 ++++++++++--- tools/tools.h | 2 ++ 4 files changed, 25 insertions(+), 15 deletions(-) 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 \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 7fb52a199..9844411d6 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; @@ -1584,7 +1589,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 @@ -1607,12 +1614,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; } 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 { -- cgit v1.2.1