2013-03-05 19:42:32 +04:00
/*
* Copyright ( C ) 2013 Red Hat , Inc . All rights reserved .
*
* This file is part of LVM2 .
*
* This copyrighted material is made available to anyone wishing to use ,
* modify , copy , or redistribute it subject to the terms and conditions
* of the GNU Lesser General Public License v .2 .1 .
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program ; if not , write to the Free Software Foundation ,
* Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*/
/*
* MACROS :
config: add CFG_DEFAULT_RUN_TIME for config options with runtime defaults
Previously, we declared a default value as undefined ("NULL") for
settings which require runtime context to be set first (e.g. settings
for paths that rely on SYSTEM_DIR environment variable or they depend
on any other setting in some way).
If we want to output default values as they are really used in runtime,
we should make it possible to define a default value as function which
is evaluated, not just providing a firm constant value as it was before.
This patch defines simple prototypes for such functions. Also, there's
new helper macros "cfg_runtime" and "cfg_array_runtime" - they provide
exactly the same functionality as the original "cfg" and "cfg_array"
macros when defining the configuration settings in config_settings.h,
but they don't set the constant default value. Instead, they automatically
link the configuration setting definition with one of these functions:
typedef int (*t_fn_CFG_TYPE_BOOL) (struct cmd_context *cmd, struct profile *profile);
typedef int (*t_fn_CFG_TYPE_INT) (struct cmd_context *cmd, struct profile *profile);
typedef float (*t_fn_CFG_TYPE_FLOAT) (struct cmd_context *cmd, struct profile *profile);
typedef const char* (*t_fn_CFG_TYPE_STRING) (struct cmd_context *cmd, struct profile *profile);
typedef const char* (*t_fn_CFG_TYPE_ARRAY) (struct cmd_context *cmd, struct profile *profile);
(The new macros actually set the CFG_DEFAULT_RUNTIME flag properly and
set the default value link to the function accordingly).
Then such configuration setting requires a function of selected type to
be defined. This function has a predefined name:
get_default_<id>
...where the <id> is the id of the setting as defined in
config_settings.h. For example "backup_archive_dir_CFG" if defined
as a setting with default value evaluated in runtime with "cfg_runtime"
will automatically have "get_default_backup_archive_dir_CFG" function
linked to this setting to get the default value.
2014-03-03 15:34:11 +04:00
* - define a configuration section :
* cfg_section ( id , name , parent , flags , since_version , comment )
2013-03-05 19:42:32 +04:00
*
config: add CFG_DEFAULT_RUN_TIME for config options with runtime defaults
Previously, we declared a default value as undefined ("NULL") for
settings which require runtime context to be set first (e.g. settings
for paths that rely on SYSTEM_DIR environment variable or they depend
on any other setting in some way).
If we want to output default values as they are really used in runtime,
we should make it possible to define a default value as function which
is evaluated, not just providing a firm constant value as it was before.
This patch defines simple prototypes for such functions. Also, there's
new helper macros "cfg_runtime" and "cfg_array_runtime" - they provide
exactly the same functionality as the original "cfg" and "cfg_array"
macros when defining the configuration settings in config_settings.h,
but they don't set the constant default value. Instead, they automatically
link the configuration setting definition with one of these functions:
typedef int (*t_fn_CFG_TYPE_BOOL) (struct cmd_context *cmd, struct profile *profile);
typedef int (*t_fn_CFG_TYPE_INT) (struct cmd_context *cmd, struct profile *profile);
typedef float (*t_fn_CFG_TYPE_FLOAT) (struct cmd_context *cmd, struct profile *profile);
typedef const char* (*t_fn_CFG_TYPE_STRING) (struct cmd_context *cmd, struct profile *profile);
typedef const char* (*t_fn_CFG_TYPE_ARRAY) (struct cmd_context *cmd, struct profile *profile);
(The new macros actually set the CFG_DEFAULT_RUNTIME flag properly and
set the default value link to the function accordingly).
Then such configuration setting requires a function of selected type to
be defined. This function has a predefined name:
get_default_<id>
...where the <id> is the id of the setting as defined in
config_settings.h. For example "backup_archive_dir_CFG" if defined
as a setting with default value evaluated in runtime with "cfg_runtime"
will automatically have "get_default_backup_archive_dir_CFG" function
linked to this setting to get the default value.
2014-03-03 15:34:11 +04:00
* - define a configuration setting of simple type :
* cfg ( id , name , parent , flags , type , default_value , since_version , comment )
*
* - define a configuration array of one or more types :
* cfg_array ( id , name , parent , flags , types , default_value , since_version , comment )
*
* If default value can ' t be assigned statically because it depends on some
* run - time checks or if it depends on other settings already defined ,
* the configuration setting or array can be defined with the
* " {cfg|cfg_array}_runtime " macro . In this case the default value
* is evaluated by automatically calling " get_default_<id> " function .
* See config . h and " function types to evaluate default value at runtime " .
2013-03-05 19:42:32 +04:00
*
config: add CFG_DEFAULT_RUN_TIME for config options with runtime defaults
Previously, we declared a default value as undefined ("NULL") for
settings which require runtime context to be set first (e.g. settings
for paths that rely on SYSTEM_DIR environment variable or they depend
on any other setting in some way).
If we want to output default values as they are really used in runtime,
we should make it possible to define a default value as function which
is evaluated, not just providing a firm constant value as it was before.
This patch defines simple prototypes for such functions. Also, there's
new helper macros "cfg_runtime" and "cfg_array_runtime" - they provide
exactly the same functionality as the original "cfg" and "cfg_array"
macros when defining the configuration settings in config_settings.h,
but they don't set the constant default value. Instead, they automatically
link the configuration setting definition with one of these functions:
typedef int (*t_fn_CFG_TYPE_BOOL) (struct cmd_context *cmd, struct profile *profile);
typedef int (*t_fn_CFG_TYPE_INT) (struct cmd_context *cmd, struct profile *profile);
typedef float (*t_fn_CFG_TYPE_FLOAT) (struct cmd_context *cmd, struct profile *profile);
typedef const char* (*t_fn_CFG_TYPE_STRING) (struct cmd_context *cmd, struct profile *profile);
typedef const char* (*t_fn_CFG_TYPE_ARRAY) (struct cmd_context *cmd, struct profile *profile);
(The new macros actually set the CFG_DEFAULT_RUNTIME flag properly and
set the default value link to the function accordingly).
Then such configuration setting requires a function of selected type to
be defined. This function has a predefined name:
get_default_<id>
...where the <id> is the id of the setting as defined in
config_settings.h. For example "backup_archive_dir_CFG" if defined
as a setting with default value evaluated in runtime with "cfg_runtime"
will automatically have "get_default_backup_archive_dir_CFG" function
linked to this setting to get the default value.
2014-03-03 15:34:11 +04:00
*
* VARIABLES :
2013-03-05 19:42:32 +04:00
* id : unique identifier
* name : configuration node name
* parent : id of parent configuration node
* flags : configuration item flags :
* CFG_NAME_VARIABLE - configuration node name is variable
* CFG_ALLOW_EMPTY - node value can be emtpy
* CFG_ADVANCED - this node belongs to advanced config set
* CFG_UNSUPPORTED - this node belongs to unsupported config set
2013-06-26 18:27:28 +04:00
* CFG_PROFILABLE - this node is customizable by a profile
2014-05-19 18:29:50 +04:00
* CFG_PROFILABLE_METADATA - profilable and attachable to VG / LV metadata
2014-02-25 14:05:23 +04:00
* CFG_DEFAULT_UNDEFINED - node ' s default value is undefined
2013-07-16 17:18:40 +04:00
* type : allowed type for the value of simple configuation setting , one of :
* CFG_TYPE_BOOL
* CFG_TYPE_INT
* CFG_TYPE_FLOAT
* CFG_TYPE_STRING
2013-03-05 19:42:32 +04:00
* types : allowed types for the values of array configuration setting
* ( use logical " OR " to define more than one allowed type ,
* e . g . CFG_TYPE_STRING | CFG_TYPE_INT )
* default_value : default value of type ' type ' for the configuration node ,
* if this is an array with several ' types ' defined then
* default value is a string where each string representation
* of each value is prefixed by ' # X ' where X is one of :
* ' B ' for boolean value
* ' I ' for integer value
* ' F ' for float value
* ' S ' for string value
* ' # ' for the ' # ' character itself
* For example , " #Sfd#I16 " means default value [ " fd " , 16 ] .
* comment : brief comment used in configuration dumps
* since_version : the version this configuration node first appeared in ( be sure
* that parent nodes are consistent with versioning , no check done
* if parent node is older or the same age as any child node ! )
*/
2014-04-17 12:48:55 +04:00
# include "defaults.h"
2013-03-05 19:42:32 +04:00
cfg_section ( root_CFG_SECTION , " (root) " , root_CFG_SECTION , 0 , vsn ( 0 , 0 , 0 ) , NULL )
cfg_section ( config_CFG_SECTION , " config " , root_CFG_SECTION , 0 , vsn ( 2 , 2 , 99 ) , " Configuration handling. " )
cfg_section ( devices_CFG_SECTION , " devices " , root_CFG_SECTION , 0 , vsn ( 1 , 0 , 0 ) , NULL )
2013-06-27 13:22:02 +04:00
cfg_section ( allocation_CFG_SECTION , " allocation " , root_CFG_SECTION , CFG_PROFILABLE , vsn ( 2 , 2 , 77 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg_section ( log_CFG_SECTION , " log " , root_CFG_SECTION , 0 , vsn ( 1 , 0 , 0 ) , NULL )
cfg_section ( backup_CFG_SECTION , " backup " , root_CFG_SECTION , 0 , vsn ( 1 , 0 , 0 ) , NULL )
cfg_section ( shell_CFG_SECTION , " shell " , root_CFG_SECTION , 0 , vsn ( 1 , 0 , 0 ) , NULL )
2014-03-17 19:03:53 +04:00
cfg_section ( global_CFG_SECTION , " global " , root_CFG_SECTION , CFG_PROFILABLE , vsn ( 1 , 0 , 0 ) , NULL )
2013-06-27 13:22:02 +04:00
cfg_section ( activation_CFG_SECTION , " activation " , root_CFG_SECTION , CFG_PROFILABLE , vsn ( 1 , 0 , 0 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg_section ( metadata_CFG_SECTION , " metadata " , root_CFG_SECTION , CFG_ADVANCED , vsn ( 1 , 0 , 0 ) , NULL )
2014-03-17 17:27:49 +04:00
cfg_section ( report_CFG_SECTION , " report " , root_CFG_SECTION , CFG_ADVANCED | CFG_PROFILABLE , vsn ( 1 , 0 , 0 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg_section ( dmeventd_CFG_SECTION , " dmeventd " , root_CFG_SECTION , 0 , vsn ( 1 , 2 , 3 ) , NULL )
cfg_section ( tags_CFG_SECTION , " tags " , root_CFG_SECTION , 0 , vsn ( 1 , 0 , 18 ) , NULL )
cfg ( config_checks_CFG , " checks " , config_CFG_SECTION , 0 , CFG_TYPE_BOOL , 1 , vsn ( 2 , 2 , 99 ) , " Configuration tree check on each LVM command execution. " )
2013-03-05 20:36:10 +04:00
cfg ( config_abort_on_errors_CFG , " abort_on_errors " , config_CFG_SECTION , 0 , CFG_TYPE_BOOL , 0 , vsn ( 2 , 2 , 99 ) , " Abort LVM command execution if configuration is invalid. " )
2014-03-03 16:30:13 +04:00
cfg_runtime ( config_profile_dir_CFG , " profile_dir " , config_CFG_SECTION , 0 , CFG_TYPE_STRING , vsn ( 2 , 2 , 99 ) , " Directory with configuration profiles. " )
2013-03-05 19:42:32 +04:00
cfg ( devices_dir_CFG , " dir " , devices_CFG_SECTION , 0 , CFG_TYPE_STRING , DEFAULT_DEV_DIR , vsn ( 1 , 0 , 0 ) , NULL )
cfg_array ( devices_scan_CFG , " scan " , devices_CFG_SECTION , 0 , CFG_TYPE_STRING , " #S/dev " , vsn ( 1 , 0 , 0 ) , NULL )
2014-02-25 14:05:23 +04:00
cfg_array ( devices_loopfiles_CFG , " loopfiles " , devices_CFG_SECTION , CFG_DEFAULT_UNDEFINED , CFG_TYPE_STRING , NULL , vsn ( 1 , 2 , 0 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg ( devices_obtain_device_list_from_udev_CFG , " obtain_device_list_from_udev " , devices_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_OBTAIN_DEVICE_LIST_FROM_UDEV , vsn ( 2 , 2 , 85 ) , NULL )
2014-02-25 14:05:23 +04:00
cfg_array ( devices_preferred_names_CFG , " preferred_names " , devices_CFG_SECTION , CFG_ALLOW_EMPTY | CFG_DEFAULT_UNDEFINED , CFG_TYPE_STRING , NULL , vsn ( 1 , 2 , 19 ) , NULL )
cfg_array ( devices_filter_CFG , " filter " , devices_CFG_SECTION , CFG_DEFAULT_UNDEFINED , CFG_TYPE_STRING , NULL , vsn ( 1 , 0 , 0 ) , NULL )
cfg_array ( devices_global_filter_CFG , " global_filter " , devices_CFG_SECTION , CFG_DEFAULT_UNDEFINED , CFG_TYPE_STRING , NULL , vsn ( 2 , 2 , 98 ) , NULL )
2014-03-03 15:47:32 +04:00
cfg_runtime ( devices_cache_CFG , " cache " , devices_CFG_SECTION , 0 , CFG_TYPE_STRING , vsn ( 1 , 0 , 0 ) , NULL )
cfg_runtime ( devices_cache_dir_CFG , " cache_dir " , devices_CFG_SECTION , 0 , CFG_TYPE_STRING , vsn ( 1 , 2 , 19 ) , NULL )
cfg ( devices_cache_file_prefix_CFG , " cache_file_prefix " , devices_CFG_SECTION , CFG_ALLOW_EMPTY , CFG_TYPE_STRING , DEFAULT_CACHE_FILE_PREFIX , vsn ( 1 , 2 , 19 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg ( devices_write_cache_state_CFG , " write_cache_state " , devices_CFG_SECTION , 0 , CFG_TYPE_BOOL , 1 , vsn ( 1 , 0 , 0 ) , NULL )
2014-02-25 14:05:23 +04:00
cfg_array ( devices_types_CFG , " types " , devices_CFG_SECTION , CFG_DEFAULT_UNDEFINED , CFG_TYPE_INT | CFG_TYPE_STRING , NULL , vsn ( 1 , 0 , 0 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg ( devices_sysfs_scan_CFG , " sysfs_scan " , devices_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_SYSFS_SCAN , vsn ( 1 , 0 , 8 ) , NULL )
cfg ( devices_multipath_component_detection_CFG , " multipath_component_detection " , devices_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_MULTIPATH_COMPONENT_DETECTION , vsn ( 2 , 2 , 89 ) , NULL )
cfg ( devices_md_component_detection_CFG , " md_component_detection " , devices_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_MD_COMPONENT_DETECTION , vsn ( 1 , 0 , 18 ) , NULL )
cfg ( devices_md_chunk_alignment_CFG , " md_chunk_alignment " , devices_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_MD_CHUNK_ALIGNMENT , vsn ( 2 , 2 , 48 ) , NULL )
cfg ( devices_default_data_alignment_CFG , " default_data_alignment " , devices_CFG_SECTION , 0 , CFG_TYPE_INT , DEFAULT_DATA_ALIGNMENT , vsn ( 2 , 2 , 75 ) , NULL )
cfg ( devices_data_alignment_detection_CFG , " data_alignment_detection " , devices_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_DATA_ALIGNMENT_DETECTION , vsn ( 2 , 2 , 51 ) , NULL )
cfg ( devices_data_alignment_CFG , " data_alignment " , devices_CFG_SECTION , 0 , CFG_TYPE_INT , 0 , vsn ( 2 , 2 , 45 ) , NULL )
cfg ( devices_data_alignment_offset_detection_CFG , " data_alignment_offset_detection " , devices_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_DATA_ALIGNMENT_OFFSET_DETECTION , vsn ( 2 , 2 , 50 ) , NULL )
cfg ( devices_ignore_suspended_devices_CFG , " ignore_suspended_devices " , devices_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_IGNORE_SUSPENDED_DEVICES , vsn ( 1 , 2 , 19 ) , NULL )
Mirror: Fix hangs and lock-ups caused by attempting label reads of mirrors
There is a problem with the way mirrors have been designed to handle
failures that is resulting in stuck LVM processes and hung I/O. When
mirrors encounter a write failure, they block I/O and notify userspace
to reconfigure the mirror to remove failed devices. This process is
open to a couple races:
1) Any LVM process other than the one that is meant to deal with the
mirror failure can attempt to read the mirror, fail, and block other
LVM commands (including the repair command) from proceeding due to
holding a lock on the volume group.
2) If there are multiple mirrors that suffer a failure in the same
volume group, a repair can block while attempting to read the LVM
label from one mirror while trying to repair the other.
Mitigation of these races has been attempted by disallowing label reading
of mirrors that are either suspended or are indicated as blocking by
the kernel. While this has closed the window of opportunity for hitting
the above problems considerably, it hasn't closed it completely. This is
because it is still possible to start an LVM command, read the status of
the mirror as healthy, and then perform the read for the label at the
moment after a the failure is discovered by the kernel.
I can see two solutions to this problem:
1) Allow users to configure whether mirrors can be candidates for LVM
labels (i.e. whether PVs can be created on mirror LVs). If the user
chooses to allow label scanning of mirror LVs, it will be at the expense
of a possible hang in I/O or LVM processes.
2) Instrument a way to allow asynchronous label reading - allowing
blocked label reads to be ignored while continuing to process the LVM
command. This would action would allow LVM commands to continue even
though they would have otherwise blocked trying to read a mirror. They
can then release their lock and allow a repair command to commence. In
the event of #2 above, the repair command already in progress can continue
and repair the failed mirror.
This patch brings solution #1. If solution #2 is developed later on, the
configuration option created in #1 can be negated - allowing mirrors to
be scanned for labels by default once again.
2013-10-23 04:14:33 +04:00
cfg ( devices_ignore_lvm_mirrors_CFG , " ignore_lvm_mirrors " , devices_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_IGNORE_LVM_MIRRORS , vsn ( 2 , 2 , 104 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg ( devices_disable_after_error_count_CFG , " disable_after_error_count " , devices_CFG_SECTION , 0 , CFG_TYPE_INT , DEFAULT_DISABLE_AFTER_ERROR_COUNT , vsn ( 2 , 2 , 75 ) , NULL )
cfg ( devices_require_restorefile_with_uuid_CFG , " require_restorefile_with_uuid " , devices_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_REQUIRE_RESTOREFILE_WITH_UUID , vsn ( 2 , 2 , 73 ) , NULL )
cfg ( devices_pv_min_size_CFG , " pv_min_size " , devices_CFG_SECTION , 0 , CFG_TYPE_INT , DEFAULT_PV_MIN_SIZE_KB , vsn ( 2 , 2 , 85 ) , NULL )
cfg ( devices_issue_discards_CFG , " issue_discards " , devices_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_ISSUE_DISCARDS , vsn ( 2 , 2 , 85 ) , NULL )
2014-02-25 14:05:23 +04:00
cfg_array ( allocation_cling_tag_list_CFG , " cling_tag_list " , allocation_CFG_SECTION , CFG_DEFAULT_UNDEFINED , CFG_TYPE_STRING , NULL , vsn ( 2 , 2 , 77 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg ( allocation_maximise_cling_CFG , " maximise_cling " , allocation_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_MAXIMISE_CLING , vsn ( 2 , 2 , 85 ) , NULL )
2013-11-27 16:52:15 +04:00
cfg ( allocation_use_blkid_wiping_CFG , " use_blkid_wiping " , allocation_CFG_SECTION , 0 , CFG_TYPE_BOOL , 1 , vsn ( 2 , 2 , 105 ) , NULL )
2013-12-09 13:35:47 +04:00
cfg ( allocation_wipe_signatures_when_zeroing_new_lvs_CFG , " wipe_signatures_when_zeroing_new_lvs " , allocation_CFG_SECTION , 0 , CFG_TYPE_BOOL , 1 , vsn ( 2 , 2 , 105 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg ( allocation_mirror_logs_require_separate_pvs_CFG , " mirror_logs_require_separate_pvs " , allocation_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_MIRROR_LOGS_REQUIRE_SEPARATE_PVS , vsn ( 2 , 2 , 85 ) , NULL )
2014-02-01 03:09:47 +04:00
cfg ( allocation_cache_pool_metadata_require_separate_pvs_CFG , " cache_pool_metadata_require_separate_pvs " , allocation_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_CACHE_POOL_METADATA_REQUIRE_SEPARATE_PVS , vsn ( 2 , 2 , 106 ) , NULL )
2014-03-04 14:15:54 +04:00
cfg_runtime ( allocation_cache_pool_chunk_size_CFG , " cache_pool_chunk_size " , allocation_CFG_SECTION , CFG_DEFAULT_UNDEFINED , CFG_TYPE_INT , vsn ( 2 , 2 , 106 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg ( allocation_thin_pool_metadata_require_separate_pvs_CFG , " thin_pool_metadata_require_separate_pvs " , allocation_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_THIN_POOL_METADATA_REQUIRE_SEPARATE_PVS , vsn ( 2 , 2 , 89 ) , NULL )
2014-05-19 18:29:50 +04:00
cfg ( allocation_thin_pool_zero_CFG , " thin_pool_zero " , allocation_CFG_SECTION , CFG_PROFILABLE | CFG_PROFILABLE_METADATA , CFG_TYPE_BOOL , DEFAULT_THIN_POOL_ZERO , vsn ( 2 , 2 , 99 ) , NULL )
cfg ( allocation_thin_pool_discards_CFG , " thin_pool_discards " , allocation_CFG_SECTION , CFG_PROFILABLE | CFG_PROFILABLE_METADATA , CFG_TYPE_STRING , DEFAULT_THIN_POOL_DISCARDS , vsn ( 2 , 2 , 99 ) , NULL )
cfg ( allocation_thin_pool_chunk_size_policy_CFG , " thin_pool_chunk_size_policy " , allocation_CFG_SECTION , CFG_PROFILABLE | CFG_PROFILABLE_METADATA , CFG_TYPE_STRING , DEFAULT_THIN_POOL_CHUNK_SIZE_POLICY , vsn ( 2 , 2 , 101 ) , NULL )
cfg_runtime ( allocation_thin_pool_chunk_size_CFG , " thin_pool_chunk_size " , allocation_CFG_SECTION , CFG_PROFILABLE | CFG_PROFILABLE_METADATA | CFG_DEFAULT_UNDEFINED , CFG_TYPE_INT , vsn ( 2 , 2 , 99 ) , NULL )
2013-03-05 19:42:32 +04:00
2013-09-25 17:59:30 +04:00
2013-03-05 19:42:32 +04:00
cfg ( log_verbose_CFG , " verbose " , log_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_VERBOSE , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( log_silent_CFG , " silent " , log_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_SILENT , vsn ( 2 , 2 , 98 ) , NULL )
cfg ( log_syslog_CFG , " syslog " , log_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_SYSLOG , vsn ( 1 , 0 , 0 ) , NULL )
2014-03-06 12:41:11 +04:00
cfg ( log_file_CFG , " file " , log_CFG_SECTION , CFG_DEFAULT_UNDEFINED , CFG_TYPE_STRING , NULL , vsn ( 1 , 0 , 0 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg ( log_overwrite_CFG , " overwrite " , log_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_OVERWRITE , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( log_level_CFG , " level " , log_CFG_SECTION , 0 , CFG_TYPE_INT , DEFAULT_LOGLEVEL , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( log_indent_CFG , " indent " , log_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_INDENT , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( log_command_names_CFG , " command_names " , log_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_CMD_NAME , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( log_prefix_CFG , " prefix " , log_CFG_SECTION , CFG_ALLOW_EMPTY , CFG_TYPE_STRING , DEFAULT_MSG_PREFIX , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( log_activation_CFG , " activation " , log_CFG_SECTION , 0 , CFG_TYPE_BOOL , 0 , vsn ( 1 , 0 , 0 ) , NULL )
2014-03-06 12:41:11 +04:00
cfg ( log_activate_file_CFG , " activate_file " , log_CFG_SECTION , CFG_DEFAULT_UNDEFINED , CFG_TYPE_STRING , NULL , vsn ( 1 , 0 , 0 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg_array ( log_debug_classes_CFG , " debug_classes " , log_CFG_SECTION , CFG_ALLOW_EMPTY , CFG_TYPE_STRING , " #Smemory#Sdevices#Sactivation#Sallocation#Slvmetad#Smetadata#Scache#Slocking " , vsn ( 2 , 2 , 99 ) , NULL )
cfg ( backup_backup_CFG , " backup " , backup_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_BACKUP_ENABLED , vsn ( 1 , 0 , 0 ) , NULL )
2014-03-03 16:24:30 +04:00
cfg_runtime ( backup_backup_dir_CFG , " backup_dir " , backup_CFG_SECTION , 0 , CFG_TYPE_STRING , vsn ( 1 , 0 , 0 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg ( backup_archive_CFG , " archive " , backup_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_ARCHIVE_ENABLED , vsn ( 1 , 0 , 0 ) , NULL )
2014-03-03 16:24:30 +04:00
cfg_runtime ( backup_archive_dir_CFG , " archive_dir " , backup_CFG_SECTION , 0 , CFG_TYPE_STRING , vsn ( 1 , 0 , 0 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg ( backup_retain_min_CFG , " retain_min " , backup_CFG_SECTION , 0 , CFG_TYPE_INT , DEFAULT_ARCHIVE_NUMBER , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( backup_retain_days_CFG , " retain_days " , backup_CFG_SECTION , 0 , CFG_TYPE_INT , DEFAULT_ARCHIVE_DAYS , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( shell_history_size_CFG , " history_size " , shell_CFG_SECTION , 0 , CFG_TYPE_INT , DEFAULT_MAX_HISTORY , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( global_umask_CFG , " umask " , global_CFG_SECTION , 0 , CFG_TYPE_INT , DEFAULT_UMASK , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( global_test_CFG , " test " , global_CFG_SECTION , 0 , CFG_TYPE_BOOL , 0 , vsn ( 1 , 0 , 0 ) , NULL )
2014-03-17 19:03:53 +04:00
cfg ( global_units_CFG , " units " , global_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_STRING , DEFAULT_UNITS , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( global_si_unit_consistency_CFG , " si_unit_consistency " , global_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_BOOL , DEFAULT_SI_UNIT_CONSISTENCY , vsn ( 2 , 2 , 54 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg ( global_activation_CFG , " activation " , global_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_ACTIVATION , vsn ( 1 , 0 , 0 ) , NULL )
2014-03-18 12:24:17 +04:00
cfg ( global_suffix_CFG , " suffix " , global_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_BOOL , DEFAULT_SUFFIX , vsn ( 1 , 0 , 0 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg ( global_fallback_to_lvm1_CFG , " fallback_to_lvm1 " , global_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_FALLBACK_TO_LVM1 , vsn ( 1 , 0 , 18 ) , NULL )
cfg ( global_format_CFG , " format " , global_CFG_SECTION , 0 , CFG_TYPE_STRING , DEFAULT_FORMAT , vsn ( 1 , 0 , 0 ) , NULL )
2014-02-25 14:05:23 +04:00
cfg_array ( global_format_libraries_CFG , " format_libraries " , global_CFG_SECTION , CFG_DEFAULT_UNDEFINED , CFG_TYPE_STRING , NULL , vsn ( 1 , 0 , 0 ) , NULL )
cfg_array ( global_segment_libraries_CFG , " segment_libraries " , global_CFG_SECTION , CFG_DEFAULT_UNDEFINED , CFG_TYPE_STRING , NULL , vsn ( 1 , 0 , 18 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg ( global_proc_CFG , " proc " , global_CFG_SECTION , 0 , CFG_TYPE_STRING , DEFAULT_PROC_DIR , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( global_locking_type_CFG , " locking_type " , global_CFG_SECTION , 0 , CFG_TYPE_INT , 1 , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( global_wait_for_locks_CFG , " wait_for_locks " , global_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_WAIT_FOR_LOCKS , vsn ( 2 , 2 , 50 ) , NULL )
cfg ( global_fallback_to_clustered_locking_CFG , " fallback_to_clustered_locking " , global_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_FALLBACK_TO_CLUSTERED_LOCKING , vsn ( 2 , 2 , 42 ) , NULL )
cfg ( global_fallback_to_local_locking_CFG , " fallback_to_local_locking " , global_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_FALLBACK_TO_LOCAL_LOCKING , vsn ( 2 , 2 , 42 ) , NULL )
cfg ( global_locking_dir_CFG , " locking_dir " , global_CFG_SECTION , 0 , CFG_TYPE_STRING , DEFAULT_LOCK_DIR , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( global_prioritise_write_locks_CFG , " prioritise_write_locks " , global_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_PRIORITISE_WRITE_LOCKS , vsn ( 2 , 2 , 52 ) , NULL )
2014-03-06 12:41:11 +04:00
cfg ( global_library_dir_CFG , " library_dir " , global_CFG_SECTION , CFG_DEFAULT_UNDEFINED , CFG_TYPE_STRING , NULL , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( global_locking_library_CFG , " locking_library " , global_CFG_SECTION , CFG_ALLOW_EMPTY , CFG_TYPE_STRING , DEFAULT_LOCKING_LIB , vsn ( 1 , 0 , 0 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg ( global_abort_on_internal_errors_CFG , " abort_on_internal_errors " , global_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_ABORT_ON_INTERNAL_ERRORS , vsn ( 2 , 2 , 57 ) , NULL )
cfg ( global_detect_internal_vg_cache_corruption_CFG , " detect_internal_vg_cache_corruption " , global_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_DETECT_INTERNAL_VG_CACHE_CORRUPTION , vsn ( 2 , 2 , 96 ) , NULL )
cfg ( global_metadata_read_only_CFG , " metadata_read_only " , global_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_METADATA_READ_ONLY , vsn ( 2 , 2 , 75 ) , NULL )
cfg ( global_mirror_segtype_default_CFG , " mirror_segtype_default " , global_CFG_SECTION , 0 , CFG_TYPE_STRING , DEFAULT_MIRROR_SEGTYPE , vsn ( 2 , 2 , 87 ) , NULL )
cfg ( global_raid10_segtype_default_CFG , " raid10_segtype_default " , global_CFG_SECTION , 0 , CFG_TYPE_STRING , DEFAULT_RAID10_SEGTYPE , vsn ( 2 , 2 , 99 ) , NULL )
2014-03-18 12:49:53 +04:00
cfg ( global_lvdisplay_shows_full_device_path_CFG , " lvdisplay_shows_full_device_path " , global_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_BOOL , DEFAULT_LVDISPLAY_SHOWS_FULL_DEVICE_PATH , vsn ( 2 , 2 , 89 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg ( global_use_lvmetad_CFG , " use_lvmetad " , global_CFG_SECTION , 0 , CFG_TYPE_BOOL , 0 , vsn ( 2 , 2 , 93 ) , NULL )
cfg ( global_thin_check_executable_CFG , " thin_check_executable " , global_CFG_SECTION , CFG_ALLOW_EMPTY , CFG_TYPE_STRING , THIN_CHECK_CMD , vsn ( 2 , 2 , 94 ) , NULL )
cfg_array ( global_thin_check_options_CFG , " thin_check_options " , global_CFG_SECTION , 0 , CFG_TYPE_STRING , " #S " DEFAULT_THIN_CHECK_OPTIONS , vsn ( 2 , 2 , 96 ) , NULL )
2014-03-24 19:31:27 +04:00
cfg_array ( global_thin_disabled_features_CFG , " thin_disabled_features " , global_CFG_SECTION , CFG_ALLOW_EMPTY , CFG_TYPE_STRING , NULL , vsn ( 2 , 2 , 99 ) , NULL )
2013-07-31 16:38:10 +04:00
cfg ( global_thin_dump_executable_CFG , " thin_dump_executable " , global_CFG_SECTION , CFG_ALLOW_EMPTY , CFG_TYPE_STRING , THIN_DUMP_CMD , vsn ( 2 , 2 , 100 ) , NULL )
cfg ( global_thin_repair_executable_CFG , " thin_repair_executable " , global_CFG_SECTION , CFG_ALLOW_EMPTY , CFG_TYPE_STRING , THIN_REPAIR_CMD , vsn ( 2 , 2 , 100 ) , NULL )
cfg_array ( global_thin_repair_options_CFG , " thin_repair_options " , global_CFG_SECTION , 0 , CFG_TYPE_STRING , " #S " DEFAULT_THIN_REPAIR_OPTIONS , vsn ( 2 , 2 , 100 ) , NULL )
2014-07-04 18:31:29 +04:00
cfg ( global_cache_check_executable_CFG , " cache_check_executable " , global_CFG_SECTION , CFG_ALLOW_EMPTY , CFG_TYPE_STRING , CACHE_CHECK_CMD , vsn ( 2 , 2 , 108 ) , NULL )
cfg_array ( global_cache_check_options_CFG , " cache_check_options " , global_CFG_SECTION , 0 , CFG_TYPE_STRING , " #S " DEFAULT_CACHE_CHECK_OPTIONS , vsn ( 2 , 2 , 108 ) , NULL )
cfg ( global_cache_dump_executable_CFG , " cache_dump_executable " , global_CFG_SECTION , CFG_ALLOW_EMPTY , CFG_TYPE_STRING , CACHE_DUMP_CMD , vsn ( 2 , 2 , 108 ) , NULL )
cfg ( global_cache_repair_executable_CFG , " cache_repair_executable " , global_CFG_SECTION , CFG_ALLOW_EMPTY , CFG_TYPE_STRING , CACHE_REPAIR_CMD , vsn ( 2 , 2 , 108 ) , NULL )
cfg_array ( global_cache_repair_options_CFG , " cache_repair_options " , global_CFG_SECTION , 0 , CFG_TYPE_STRING , " #S " DEFAULT_CACHE_REPAIR_OPTIONS , vsn ( 2 , 2 , 108 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg ( activation_checks_CFG , " checks " , activation_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_ACTIVATION_CHECKS , vsn ( 2 , 2 , 86 ) , NULL )
cfg ( activation_udev_sync_CFG , " udev_sync " , activation_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_UDEV_SYNC , vsn ( 2 , 2 , 51 ) , NULL )
cfg ( activation_udev_rules_CFG , " udev_rules " , activation_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_UDEV_RULES , vsn ( 2 , 2 , 57 ) , NULL )
cfg ( activation_verify_udev_operations_CFG , " verify_udev_operations " , activation_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_VERIFY_UDEV_OPERATIONS , vsn ( 2 , 2 , 86 ) , NULL )
cfg ( activation_retry_deactivation_CFG , " retry_deactivation " , activation_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_RETRY_DEACTIVATION , vsn ( 2 , 2 , 89 ) , NULL )
cfg ( activation_missing_stripe_filler_CFG , " missing_stripe_filler " , activation_CFG_SECTION , 0 , CFG_TYPE_STRING , DEFAULT_STRIPE_FILLER , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( activation_use_linear_target_CFG , " use_linear_target " , activation_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_USE_LINEAR_TARGET , vsn ( 2 , 2 , 89 ) , NULL )
cfg ( activation_reserved_stack_CFG , " reserved_stack " , activation_CFG_SECTION , 0 , CFG_TYPE_INT , DEFAULT_RESERVED_STACK , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( activation_reserved_memory_CFG , " reserved_memory " , activation_CFG_SECTION , 0 , CFG_TYPE_INT , DEFAULT_RESERVED_MEMORY , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( activation_process_priority_CFG , " process_priority " , activation_CFG_SECTION , 0 , CFG_TYPE_INT , DEFAULT_PROCESS_PRIORITY , vsn ( 1 , 0 , 0 ) , NULL )
2014-02-25 14:05:23 +04:00
cfg_array ( activation_volume_list_CFG , " volume_list " , activation_CFG_SECTION , CFG_ALLOW_EMPTY | CFG_DEFAULT_UNDEFINED , CFG_TYPE_STRING , NULL , vsn ( 1 , 0 , 18 ) , NULL )
cfg_array ( activation_auto_activation_volume_list_CFG , " auto_activation_volume_list " , activation_CFG_SECTION , CFG_ALLOW_EMPTY | CFG_DEFAULT_UNDEFINED , CFG_TYPE_STRING , NULL , vsn ( 2 , 2 , 97 ) , NULL )
cfg_array ( activation_read_only_volume_list_CFG , " read_only_volume_list " , activation_CFG_SECTION , CFG_ALLOW_EMPTY | CFG_DEFAULT_UNDEFINED , CFG_TYPE_STRING , NULL , vsn ( 2 , 2 , 89 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg ( activation_mirror_region_size_CFG , " mirror_region_size " , activation_CFG_SECTION , 0 , CFG_TYPE_INT , DEFAULT_RAID_REGION_SIZE , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( activation_raid_region_size_CFG , " raid_region_size " , activation_CFG_SECTION , 0 , CFG_TYPE_INT , DEFAULT_RAID_REGION_SIZE , vsn ( 2 , 2 , 99 ) , NULL )
cfg ( activation_readahead_CFG , " readahead " , activation_CFG_SECTION , 0 , CFG_TYPE_STRING , DEFAULT_READ_AHEAD , vsn ( 1 , 0 , 23 ) , NULL )
cfg ( activation_raid_fault_policy_CFG , " raid_fault_policy " , activation_CFG_SECTION , 0 , CFG_TYPE_STRING , DEFAULT_RAID_FAULT_POLICY , vsn ( 2 , 2 , 89 ) , NULL )
cfg ( activation_mirror_device_fault_policy_CFG , " mirror_device_fault_policy " , activation_CFG_SECTION , 0 , CFG_TYPE_STRING , DEFAULT_MIRROR_DEVICE_FAULT_POLICY , vsn ( 1 , 2 , 10 ) , NULL )
cfg ( activation_mirror_log_fault_policy_CFG , " mirror_log_fault_policy " , activation_CFG_SECTION , 0 , CFG_TYPE_STRING , DEFAULT_MIRROR_LOG_FAULT_POLICY , vsn ( 1 , 2 , 18 ) , NULL )
2014-03-03 16:37:35 +04:00
cfg_runtime ( activation_mirror_image_fault_policy_CFG , " mirror_image_fault_policy " , activation_CFG_SECTION , 0 , CFG_TYPE_STRING , vsn ( 2 , 2 , 57 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg ( activation_snapshot_autoextend_threshold_CFG , " snapshot_autoextend_threshold " , activation_CFG_SECTION , 0 , CFG_TYPE_INT , DEFAULT_SNAPSHOT_AUTOEXTEND_THRESHOLD , vsn ( 2 , 2 , 75 ) , NULL )
cfg ( activation_snapshot_autoextend_percent_CFG , " snapshot_autoextend_percent " , activation_CFG_SECTION , 0 , CFG_TYPE_INT , DEFAULT_SNAPSHOT_AUTOEXTEND_PERCENT , vsn ( 2 , 2 , 75 ) , NULL )
2014-05-19 18:29:50 +04:00
cfg ( activation_thin_pool_autoextend_threshold_CFG , " thin_pool_autoextend_threshold " , activation_CFG_SECTION , CFG_PROFILABLE | CFG_PROFILABLE_METADATA , CFG_TYPE_INT , DEFAULT_THIN_POOL_AUTOEXTEND_THRESHOLD , vsn ( 2 , 2 , 89 ) , NULL )
cfg ( activation_thin_pool_autoextend_percent_CFG , " thin_pool_autoextend_percent " , activation_CFG_SECTION , CFG_PROFILABLE | CFG_PROFILABLE_METADATA , CFG_TYPE_INT , DEFAULT_THIN_POOL_AUTOEXTEND_PERCENT , vsn ( 2 , 2 , 89 ) , NULL )
2014-02-25 14:05:23 +04:00
cfg_array ( activation_mlock_filter_CFG , " mlock_filter " , activation_CFG_SECTION , CFG_DEFAULT_UNDEFINED , CFG_TYPE_STRING , NULL , vsn ( 2 , 2 , 62 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg ( activation_use_mlockall_CFG , " use_mlockall " , activation_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_USE_MLOCKALL , vsn ( 2 , 2 , 62 ) , NULL )
cfg ( activation_monitoring_CFG , " monitoring " , activation_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_DMEVENTD_MONITOR , vsn ( 2 , 2 , 63 ) , NULL )
cfg ( activation_polling_interval_CFG , " polling_interval " , activation_CFG_SECTION , 0 , CFG_TYPE_INT , DEFAULT_INTERVAL , vsn ( 2 , 2 , 63 ) , NULL )
2013-07-15 15:33:14 +04:00
cfg ( activation_auto_set_activation_skip_CFG , " auto_set_activation_skip " , activation_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_AUTO_SET_ACTIVATION_SKIP , vsn ( 2 , 2 , 99 ) , NULL )
activation: Add "degraded" activation mode
Currently, we have two modes of activation, an unnamed nominal mode
(which I will refer to as "complete") and "partial" mode. The
"complete" mode requires that a volume group be 'complete' - that
is, no missing PVs. If there are any missing PVs, no affected LVs
are allowed to activate - even RAID LVs which might be able to
tolerate a failure. The "partial" mode allows anything to be
activated (or at least attempted). If a non-redundant LV is
missing a portion of its addressable space due to a device failure,
it will be replaced with an error target. RAID LVs will either
activate or fail to activate depending on how badly their
redundancy is compromised.
This patch adds a third option, "degraded" mode. This mode can
be selected via the '--activationmode {complete|degraded|partial}'
option to lvchange/vgchange. It can also be set in lvm.conf.
The "degraded" activation mode allows RAID LVs with a sufficient
level of redundancy to activate (e.g. a RAID5 LV with one device
failure, a RAID6 with two device failures, or RAID1 with n-1
failures). RAID LVs with too many device failures are not allowed
to activate - nor are any non-redundant LVs that may have been
affected. This patch also makes the "degraded" mode the default
activation mode.
The degraded activation mode does not yet work in a cluster. A
new cluster lock flag (LCK_DEGRADED_MODE) will need to be created
to make that work. Currently, there is limited space for this
extra flag and I am looking for possible solutions. One possible
solution is to usurp LCK_CONVERT, as it is not used. When the
locking_type is 3, the degraded mode flag simply gets dropped and
the old ("complete") behavior is exhibited.
2014-07-10 07:56:11 +04:00
cfg ( activation_mode_CFG , " activation_mode " , activation_CFG_SECTION , 0 , CFG_TYPE_STRING , DEFAULT_ACTIVATION_MODE , vsn ( 2 , 2 , 108 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg ( metadata_pvmetadatacopies_CFG , " pvmetadatacopies " , metadata_CFG_SECTION , CFG_ADVANCED , CFG_TYPE_INT , DEFAULT_PVMETADATACOPIES , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( metadata_vgmetadatacopies_CFG , " vgmetadatacopies " , metadata_CFG_SECTION , CFG_ADVANCED , CFG_TYPE_INT , DEFAULT_VGMETADATACOPIES , vsn ( 2 , 2 , 69 ) , NULL )
cfg ( metadata_pvmetadatasize_CFG , " pvmetadatasize " , metadata_CFG_SECTION , CFG_ADVANCED , CFG_TYPE_INT , DEFAULT_PVMETADATASIZE , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( metadata_pvmetadataignore_CFG , " pvmetadataignore " , metadata_CFG_SECTION , CFG_ADVANCED , CFG_TYPE_BOOL , DEFAULT_PVMETADATAIGNORE , vsn ( 2 , 2 , 69 ) , NULL )
cfg ( metadata_stripesize_CFG , " stripesize " , metadata_CFG_SECTION , CFG_ADVANCED , CFG_TYPE_INT , DEFAULT_STRIPESIZE , vsn ( 1 , 0 , 0 ) , NULL )
2014-02-25 14:05:23 +04:00
cfg_array ( metadata_dirs_CFG , " dirs " , metadata_CFG_SECTION , CFG_ADVANCED | CFG_DEFAULT_UNDEFINED , CFG_TYPE_STRING , NULL , vsn ( 1 , 0 , 0 ) , NULL )
2013-12-13 19:43:01 +04:00
2014-02-25 14:05:23 +04:00
cfg_section ( metadata_disk_areas_CFG_SUBSECTION , " disk_areas " , metadata_CFG_SECTION , CFG_ADVANCED | CFG_UNSUPPORTED | CFG_DEFAULT_UNDEFINED , vsn ( 1 , 0 , 0 ) , NULL )
cfg_section ( disk_area_CFG_SUBSECTION , " disk_area " , metadata_disk_areas_CFG_SUBSECTION , CFG_NAME_VARIABLE | CFG_ADVANCED | CFG_UNSUPPORTED | CFG_DEFAULT_UNDEFINED , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( disk_area_start_sector_CFG , " start_sector " , disk_area_CFG_SUBSECTION , CFG_ADVANCED | CFG_UNSUPPORTED | CFG_DEFAULT_UNDEFINED , CFG_TYPE_INT , 0 , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( disk_area_size_CFG , " size " , disk_area_CFG_SUBSECTION , CFG_ADVANCED | CFG_UNSUPPORTED | CFG_DEFAULT_UNDEFINED , CFG_TYPE_INT , 0 , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( disk_area_id_CFG , " id " , disk_area_CFG_SUBSECTION , CFG_ADVANCED | CFG_UNSUPPORTED | CFG_DEFAULT_UNDEFINED , CFG_TYPE_STRING , NULL , vsn ( 1 , 0 , 0 ) , NULL )
2013-03-05 19:42:32 +04:00
2014-03-17 17:27:49 +04:00
cfg ( report_aligned_CFG , " aligned " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_BOOL , DEFAULT_REP_ALIGNED , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( report_buffered_CFG , " buffered " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_BOOL , DEFAULT_REP_BUFFERED , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( report_headings_CFG , " headings " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_BOOL , DEFAULT_REP_HEADINGS , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( report_separator_CFG , " separator " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_STRING , DEFAULT_REP_SEPARATOR , vsn ( 1 , 0 , 0 ) , NULL )
2014-07-10 18:18:45 +04:00
cfg ( report_list_item_separator_CFG , " list_item_separator " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_STRING , DEFAULT_REP_LIST_ITEM_SEPARATOR , vsn ( 2 , 2 , 108 ) , NULL )
2014-03-17 17:27:49 +04:00
cfg ( report_prefixes_CFG , " prefixes " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_BOOL , DEFAULT_REP_PREFIXES , vsn ( 2 , 2 , 36 ) , NULL )
cfg ( report_quoted_CFG , " quoted " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_BOOL , DEFAULT_REP_QUOTED , vsn ( 2 , 2 , 39 ) , NULL )
cfg ( report_colums_as_rows_CFG , " colums_as_rows " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_BOOL , DEFAULT_REP_COLUMNS_AS_ROWS , vsn ( 1 , 0 , 0 ) , NULL )
2014-07-02 15:16:32 +04:00
cfg ( report_binary_values_as_numeric_CFG , " binary_values_as_numeric " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_BOOL , 0 , vsn ( 2 , 2 , 108 ) , NULL )
2014-03-17 17:27:49 +04:00
cfg ( report_devtypes_sort_CFG , " devtypes_sort " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_STRING , DEFAULT_DEVTYPES_SORT , vsn ( 2 , 2 , 101 ) , NULL )
cfg ( report_devtypes_cols_CFG , " devtypes_cols " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_STRING , DEFAULT_DEVTYPES_COLS , vsn ( 2 , 2 , 101 ) , NULL )
cfg ( report_devtypes_cols_verbose_CFG , " devtypes_cols_verbose " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_STRING , DEFAULT_DEVTYPES_COLS_VERB , vsn ( 2 , 2 , 101 ) , NULL )
cfg ( report_lvs_sort_CFG , " lvs_sort " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_STRING , DEFAULT_LVS_SORT , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( report_lvs_cols_CFG , " lvs_cols " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_STRING , DEFAULT_LVS_COLS , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( report_lvs_cols_verbose_CFG , " lvs_cols_verbose " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_STRING , DEFAULT_LVS_COLS_VERB , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( report_vgs_sort_CFG , " vgs_sort " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_STRING , DEFAULT_VGS_SORT , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( report_vgs_cols_CFG , " vgs_cols " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_STRING , DEFAULT_VGS_COLS , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( report_vgs_cols_verbose_CFG , " vgs_cols_verbose " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_STRING , DEFAULT_VGS_COLS_VERB , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( report_pvs_sort_CFG , " pvs_sort " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_STRING , DEFAULT_PVS_SORT , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( report_pvs_cols_CFG , " pvs_cols " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_STRING , DEFAULT_PVS_COLS , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( report_pvs_cols_verbose_CFG , " pvs_cols_verbose " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_STRING , DEFAULT_PVS_COLS_VERB , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( report_segs_sort_CFG , " segs_sort " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_STRING , DEFAULT_SEGS_SORT , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( report_segs_cols_CFG , " segs_cols " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_STRING , DEFAULT_SEGS_COLS , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( report_segs_cols_verbose_CFG , " segs_cols_verbose " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_STRING , DEFAULT_SEGS_COLS_VERB , vsn ( 1 , 0 , 0 ) , NULL )
cfg ( report_pvsegs_sort_CFG , " pvsegs_sort " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_STRING , DEFAULT_PVSEGS_SORT , vsn ( 1 , 1 , 3 ) , NULL )
cfg ( report_pvsegs_cols_CFG , " pvsegs_cols " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_STRING , DEFAULT_PVSEGS_COLS , vsn ( 1 , 1 , 3 ) , NULL )
cfg ( report_pvsegs_cols_verbose_CFG , " pvsegs_cols_verbose " , report_CFG_SECTION , CFG_PROFILABLE , CFG_TYPE_STRING , DEFAULT_PVSEGS_COLS_VERB , vsn ( 1 , 1 , 3 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg ( dmeventd_mirror_library_CFG , " mirror_library " , dmeventd_CFG_SECTION , 0 , CFG_TYPE_STRING , DEFAULT_DMEVENTD_MIRROR_LIB , vsn ( 1 , 2 , 3 ) , NULL )
cfg ( dmeventd_raid_library_CFG , " raid_library " , dmeventd_CFG_SECTION , 0 , CFG_TYPE_STRING , DEFAULT_DMEVENTD_RAID_LIB , vsn ( 2 , 2 , 87 ) , NULL )
cfg ( dmeventd_snapshot_library_CFG , " snapshot_library " , dmeventd_CFG_SECTION , 0 , CFG_TYPE_STRING , DEFAULT_DMEVENTD_SNAPSHOT_LIB , vsn ( 1 , 2 , 26 ) , NULL )
cfg ( dmeventd_thin_library_CFG , " thin_library " , dmeventd_CFG_SECTION , 0 , CFG_TYPE_STRING , DEFAULT_DMEVENTD_THIN_LIB , vsn ( 2 , 2 , 89 ) , NULL )
2014-03-31 17:57:30 +04:00
cfg ( dmeventd_executable_CFG , " executable " , dmeventd_CFG_SECTION , 0 , CFG_TYPE_STRING , DEFAULT_DMEVENTD_PATH , vsn ( 2 , 2 , 73 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg ( tags_hosttags_CFG , " hosttags " , tags_CFG_SECTION , 0 , CFG_TYPE_BOOL , DEFAULT_HOSTTAGS , vsn ( 1 , 0 , 18 ) , NULL )
2014-02-25 14:05:23 +04:00
cfg_section ( tag_CFG_SUBSECTION , " tag " , tags_CFG_SECTION , CFG_NAME_VARIABLE | CFG_DEFAULT_UNDEFINED , vsn ( 1 , 0 , 18 ) , NULL )
cfg ( tag_host_list_CFG , " host_list " , tag_CFG_SUBSECTION , CFG_ALLOW_EMPTY | CFG_DEFAULT_UNDEFINED , CFG_TYPE_STRING , NULL , vsn ( 1 , 0 , 18 ) , NULL )
2013-03-05 19:42:32 +04:00
cfg ( CFG_COUNT , NULL , root_CFG_SECTION , 0 , CFG_TYPE_INT , 0 , vsn ( 0 , 0 , 0 ) , NULL )