summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlasdair G Kergon <agk@redhat.com>2012-08-07 20:40:19 +0100
committerAlasdair G Kergon <agk@redhat.com>2012-08-07 20:40:19 +0100
commit3a6bea990b01a583de830b90fee492823139b7ea (patch)
tree002e8c2b65e1ad0afcc5ac879b0b68b490768a1c
parent597590da7412485ccdcb71ca909fbc5f73ec2aa1 (diff)
downloadlvm2-3a6bea990b01a583de830b90fee492823139b7ea.tar.gz
lvm2-3a6bea990b01a583de830b90fee492823139b7ea.tar.xz
lvm2-3a6bea990b01a583de830b90fee492823139b7ea.zip
thin: tidy thin discard code
Always store discard setting in LV metadata. (Note that lvcreate_params doesn't yet use --discard to set the initial value.) Remove undocumented env var LVM_THIN_VERSION_MIN that has no use on a live system. Change verbose 'feature not found' messages to debug. Use discard_str for string value of discard.
-rw-r--r--lib/thin/thin.c35
1 files changed, 13 insertions, 22 deletions
diff --git a/lib/thin/thin.c b/lib/thin/thin.c
index 27ce6f55..3e562ef8 100644
--- a/lib/thin/thin.c
+++ b/lib/thin/thin.c
@@ -87,7 +87,7 @@ static int _thin_pool_text_import(struct lv_segment *seg,
{
const char *lv_name;
struct logical_volume *pool_data_lv, *pool_metadata_lv;
- const char *discard = NULL;
+ const char *discard_str = NULL;
if (!dm_config_get_str(sn, "metadata", &lv_name))
return SEG_LOG_ERROR("Metadata must be a string in");
@@ -115,12 +115,12 @@ static int _thin_pool_text_import(struct lv_segment *seg,
return SEG_LOG_ERROR("Could not read chunk_size");
if (dm_config_has_node(sn, "discard") &&
- !dm_config_get_str(sn, "discard", &discard))
+ !dm_config_get_str(sn, "discard", &discard_str))
return SEG_LOG_ERROR("Could not read discard for");
- if (!discard)
+ if (!discard_str)
seg->discard = THIN_DISCARD_PASSDOWN;
- else if (!get_pool_discard(discard, &seg->discard))
+ else if (!get_pool_discard(discard_str, &seg->discard))
return SEG_LOG_ERROR("Discard option unsupported for");
if (dm_config_has_node(sn, "low_water_mark") &&
@@ -165,14 +165,12 @@ static int _thin_pool_text_export(const struct lv_segment *seg, struct formatter
switch (seg->discard) {
case THIN_DISCARD_PASSDOWN:
- /* nothing to do */
- break;
case THIN_DISCARD_NO_PASSDOWN:
case THIN_DISCARD_IGNORE:
outf(f, "discard = \"%s\"", get_pool_discard_name(seg->discard));
break;
default:
- log_error(INTERNAL_ERROR "Unexportable discard.");
+ log_error(INTERNAL_ERROR "Invalid discard value %d.", seg->discard);
return 0;
}
@@ -278,9 +276,9 @@ static int _thin_pool_add_target_line(struct dev_manager *dm,
seg->zero_new_blocks ? 0 : 1))
return_0;
- if (seg->discard != THIN_DISCARD_PASSDOWN) {
+ if (seg->discard != THIN_DISCARD_PASSDOWN)
if (attr & THIN_FEATURE_DISCARD) {
- /* FIXME: Check whether underlaying dev supports discard */
+ /* FIXME: Check whether underlying dev supports discard */
if (!dm_tree_node_set_thin_pool_discard(node,
seg->discard == THIN_DISCARD_IGNORE,
seg->discard == THIN_DISCARD_NO_PASSDOWN))
@@ -288,7 +286,6 @@ static int _thin_pool_add_target_line(struct dev_manager *dm,
} else
log_warn_suppress(_no_discard++, "WARNING: Thin pool target does "
"not support discard (needs kernel >= 3.4).");
- }
/*
* Add messages only for activation tree.
@@ -545,30 +542,24 @@ static int _thin_target_present(struct cmd_context *cmd,
log_error("Cannot read " THIN_MODULE " target version.");
return 0;
}
- log_debug("Target " THIN_MODULE " has version %d:%d:%d.",
- maj, min, patchlevel);
-
- /* For testing allow to override via shell variable */
- if (getenv("LVM_THIN_VERSION_MIN"))
- min = atoi(getenv("LVM_THIN_VERSION_MIN"));
if (maj >=1 && min >= 1)
_attrs |= THIN_FEATURE_DISCARD;
else
- log_verbose("Target " THIN_MODULE
- " without discard support.");
+ /* FIXME Log this as WARNING later only if the user asked for the feature to be used but it's not present */
+ log_debug("Target " THIN_MODULE " does not support discards.");
if (maj >=1 && min >= 1)
_attrs |= THIN_FEATURE_EXTERNAL_ORIGIN;
else
- log_verbose("Target " THIN_MODULE
- " without external origin support.");
+ /* FIXME Log this as WARNING later only if the user asked for the feature to be used but it's not present */
+ log_debug("Target " THIN_MODULE " does not support external origins.");
#if 0
if (maj >=1 && min >= 1)
_attrs |= THIN_FEATURE_BLOCK_SIZE;
else
- log_verbose("Target " THIN_MODULE
- " without non power of 2 block size.");
+ /* FIXME Log this as WARNING later only if the user asked for the feature to be used but it's not present */
+ log_debug("Target " THIN_MODULE " does not support non power of 2 block sizes.");
#endif
_checked = 1;
}