aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Rajnoha <prajnoha@redhat.com>2013-06-27 11:22:02 +0200
committerPeter Rajnoha <prajnoha@redhat.com>2013-07-02 15:22:11 +0200
commit24a84549a88a6c937091b894d1f0babe10aed17d (patch)
tree664e7deee5b8fb458ab752f18fecd4959811afc2
parent6f0427cc56b1ef3ca63ba20b0ac8c0764d38632a (diff)
downloadlvm2-24a84549a88a6c937091b894d1f0babe10aed17d.tar.gz
thin: make selected thinp settings profilable
These settins are customizable by profiles: allocation/thin_pool_zero allocation/thin_pool_discards allocation/thin_pool_chunk_size activation/thin_pool_autoextend_threshold activation/thin_pool_autoextend_percent
-rw-r--r--lib/config/config_settings.h14
-rw-r--r--lib/metadata/thin_manip.c3
-rw-r--r--tools/lvconvert.c14
-rw-r--r--tools/lvcreate.c2
-rw-r--r--tools/lvresize.c6
-rw-r--r--tools/toollib.c10
-rw-r--r--tools/toollib.h4
7 files changed, 30 insertions, 23 deletions
diff --git a/lib/config/config_settings.h b/lib/config/config_settings.h
index a8d02be4b..d9112f5e0 100644
--- a/lib/config/config_settings.h
+++ b/lib/config/config_settings.h
@@ -56,12 +56,12 @@ 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)
-cfg_section(allocation_CFG_SECTION, "allocation", root_CFG_SECTION, 0, vsn(2, 2, 77), NULL)
+cfg_section(allocation_CFG_SECTION, "allocation", root_CFG_SECTION, CFG_PROFILABLE, vsn(2, 2, 77), NULL)
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)
cfg_section(global_CFG_SECTION, "global", root_CFG_SECTION, 0, vsn(1, 0, 0), NULL)
-cfg_section(activation_CFG_SECTION, "activation", root_CFG_SECTION, 0, vsn(1, 0, 0), NULL)
+cfg_section(activation_CFG_SECTION, "activation", root_CFG_SECTION, CFG_PROFILABLE, vsn(1, 0, 0), NULL)
cfg_section(metadata_CFG_SECTION, "metadata", root_CFG_SECTION, CFG_ADVANCED, vsn(1, 0, 0), NULL)
cfg_section(report_CFG_SECTION, "report", root_CFG_SECTION, CFG_ADVANCED, vsn(1, 0, 0), NULL)
cfg_section(dmeventd_CFG_SECTION, "dmeventd", root_CFG_SECTION, 0, vsn(1, 2, 3), NULL)
@@ -101,9 +101,9 @@ cfg_array(allocation_cling_tag_list_CFG, "cling_tag_list", allocation_CFG_SECTIO
cfg(allocation_maximise_cling_CFG, "maximise_cling", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_MAXIMISE_CLING, vsn(2, 2, 85), NULL)
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)
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)
-cfg(allocation_thin_pool_zero_CFG, "thin_pool_zero", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_THIN_POOL_ZERO, vsn(2, 2, 99), NULL)
-cfg(allocation_thin_pool_discards_CFG, "thin_pool_discards", allocation_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_THIN_POOL_DISCARDS, vsn(2, 2, 99), NULL)
-cfg(allocation_thin_pool_chunk_size_CFG, "thin_pool_chunk_size", allocation_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_THIN_POOL_CHUNK_SIZE, vsn(2, 2, 99), NULL)
+cfg(allocation_thin_pool_zero_CFG, "thin_pool_zero", allocation_CFG_SECTION, CFG_PROFILABLE, 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_TYPE_STRING, DEFAULT_THIN_POOL_DISCARDS, vsn(2, 2, 99), NULL)
+cfg(allocation_thin_pool_chunk_size_CFG, "thin_pool_chunk_size", allocation_CFG_SECTION, CFG_PROFILABLE, CFG_TYPE_INT, DEFAULT_THIN_POOL_CHUNK_SIZE, vsn(2, 2, 99), NULL)
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)
@@ -179,8 +179,8 @@ cfg(activation_mirror_log_fault_policy_CFG, "mirror_log_fault_policy", activatio
cfg(activation_mirror_image_fault_policy_CFG, "mirror_image_fault_policy", activation_CFG_SECTION, 0, CFG_TYPE_STRING, NULL, vsn(2, 2, 57), NULL)
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)
-cfg(activation_thin_pool_autoextend_threshold_CFG, "thin_pool_autoextend_threshold", activation_CFG_SECTION, 0, 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, 0, CFG_TYPE_INT, DEFAULT_THIN_POOL_AUTOEXTEND_PERCENT, vsn(2, 2, 89), NULL)
+cfg(activation_thin_pool_autoextend_threshold_CFG, "thin_pool_autoextend_threshold", activation_CFG_SECTION, CFG_PROFILABLE, 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_TYPE_INT, DEFAULT_THIN_POOL_AUTOEXTEND_PERCENT, vsn(2, 2, 89), NULL)
cfg_array(activation_mlock_filter_CFG, "mlock_filter", activation_CFG_SECTION, 0, CFG_TYPE_STRING, NULL, vsn(2, 2, 62), NULL)
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)
diff --git a/lib/metadata/thin_manip.c b/lib/metadata/thin_manip.c
index 9fccc6f18..4ff647a64 100644
--- a/lib/metadata/thin_manip.c
+++ b/lib/metadata/thin_manip.c
@@ -335,7 +335,8 @@ int pool_below_threshold(const struct lv_segment *pool_seg)
{
percent_t percent;
int threshold = PERCENT_1 *
- find_config_tree_int(pool_seg->lv->vg->cmd, activation_thin_pool_autoextend_threshold_CFG, NULL);
+ find_config_tree_int(pool_seg->lv->vg->cmd, activation_thin_pool_autoextend_threshold_CFG,
+ lv_config_profile(pool_seg->lv));
/* Data */
if (!lv_thin_pool_percent(pool_seg->lv, 0, &percent))
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index ffdc3f408..542c71de9 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -385,13 +385,6 @@ static int _read_params(struct lvconvert_params *lp, struct cmd_context *cmd,
return 0;
}
- if (!get_pool_params(cmd, &lp->passed_args,
- &lp->chunk_size,
- &lp->discards,
- &lp->poolmetadata_size,
- &lp->zero))
- return_0;
-
if (arg_count(cmd, poolmetadata_ARG)) {
if (arg_count(cmd, poolmetadatasize_ARG)) {
log_error("--poolmetadatasize is invalid with --poolmetadata.");
@@ -2415,6 +2408,13 @@ static int lvconvert_single(struct cmd_context *cmd, struct lvconvert_params *lp
if (!lv)
goto_out;
+ if (arg_count(cmd, thinpool_ARG) &&
+ !get_pool_params(cmd, lv_config_profile(lv),
+ &lp->passed_args, &lp->chunk_size,
+ &lp->discards, &lp->poolmetadata_size,
+ &lp->zero))
+ goto_out;
+
/*
* lp->pvh holds the list of PVs available for allocation or removal
*/
diff --git a/tools/lvcreate.c b/tools/lvcreate.c
index dcd05d0ab..698d72fed 100644
--- a/tools/lvcreate.c
+++ b/tools/lvcreate.c
@@ -859,7 +859,7 @@ static int _lvcreate_params(struct lvcreate_params *lp,
!_read_size_params(lp, lcp, cmd) ||
!get_stripe_params(cmd, &lp->stripes, &lp->stripe_size) ||
(lp->create_thin_pool &&
- !get_pool_params(cmd, &lp->passed_args,
+ !get_pool_params(cmd, NULL, &lp->passed_args,
&lp->chunk_size, &lp->discards,
&lp->poolmetadatasize, &lp->zero)) ||
!_read_mirror_params(lp, cmd) ||
diff --git a/tools/lvresize.c b/tools/lvresize.c
index bd29bc64f..47cb6aa70 100644
--- a/tools/lvresize.c
+++ b/tools/lvresize.c
@@ -306,9 +306,11 @@ static int _adjust_policy_params(struct cmd_context *cmd,
if (lv_is_thin_pool(lv)) {
policy_threshold =
- find_config_tree_int(cmd, activation_thin_pool_autoextend_threshold_CFG, NULL) * PERCENT_1;
+ find_config_tree_int(cmd, activation_thin_pool_autoextend_threshold_CFG,
+ lv_config_profile(lv)) * PERCENT_1;
policy_amount =
- find_config_tree_int(cmd, activation_thin_pool_autoextend_percent_CFG, NULL);
+ find_config_tree_int(cmd, activation_thin_pool_autoextend_percent_CFG,
+ lv_config_profile(lv));
if (!policy_amount && policy_threshold < PERCENT_100)
return 0;
} else {
diff --git a/tools/toollib.c b/tools/toollib.c
index 7f57604b3..46eb86445 100644
--- a/tools/toollib.c
+++ b/tools/toollib.c
@@ -1537,7 +1537,9 @@ int get_activation_monitoring_mode(struct cmd_context *cmd,
return 1;
}
-int get_pool_params(struct cmd_context *cmd, int *passed_args,
+int get_pool_params(struct cmd_context *cmd,
+ struct profile *profile,
+ int *passed_args,
uint32_t *chunk_size,
thin_discards_t *discards,
uint64_t *pool_metadata_size,
@@ -1551,7 +1553,7 @@ int get_pool_params(struct cmd_context *cmd, int *passed_args,
*zero = strcmp(arg_str_value(cmd, zero_ARG, "y"), "n");
log_very_verbose("Setting pool zeroing: %u", *zero);
} else
- *zero = find_config_tree_bool(cmd, allocation_thin_pool_zero_CFG, NULL);
+ *zero = find_config_tree_bool(cmd, allocation_thin_pool_zero_CFG, profile);
if (arg_count(cmd, discards_ARG)) {
*passed_args |= PASS_ARG_DISCARDS;
@@ -1559,7 +1561,7 @@ int get_pool_params(struct cmd_context *cmd, int *passed_args,
log_very_verbose("Setting pool discards: %s",
get_pool_discards_name(*discards));
} else {
- dstr = find_config_tree_str(cmd, allocation_thin_pool_discards_CFG, NULL);
+ dstr = find_config_tree_str(cmd, allocation_thin_pool_discards_CFG, profile);
if (!get_pool_discards(dstr, discards))
return_0;
}
@@ -1575,7 +1577,7 @@ int get_pool_params(struct cmd_context *cmd, int *passed_args,
log_very_verbose("Setting pool chunk size: %s",
display_size(cmd, *chunk_size));
} else
- *chunk_size = find_config_tree_int(cmd, allocation_thin_pool_chunk_size_CFG, NULL) * 2;
+ *chunk_size = find_config_tree_int(cmd, allocation_thin_pool_chunk_size_CFG, profile) * 2;
if ((*chunk_size < DM_THIN_MIN_DATA_BLOCK_SIZE) ||
(*chunk_size > DM_THIN_MAX_DATA_BLOCK_SIZE)) {
diff --git a/tools/toollib.h b/tools/toollib.h
index d2fd9ac1d..32884dba6 100644
--- a/tools/toollib.h
+++ b/tools/toollib.h
@@ -114,7 +114,9 @@ int pvcreate_params_validate(struct cmd_context *cmd,
int get_activation_monitoring_mode(struct cmd_context *cmd,
int *monitoring_mode);
-int get_pool_params(struct cmd_context *cmd, int *passed_args,
+int get_pool_params(struct cmd_context *cmd,
+ struct profile *profile,
+ int *passed_args,
uint32_t *chunk_size,
thin_discards_t *discards,
uint64_t *pool_metadata_size,