summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2014-10-07 15:41:54 +0200
committerZdenek Kabelac <zkabelac@redhat.com>2014-10-07 15:52:31 +0200
commit0cbb381e159f0606ec749697a596d2a6cc814283 (patch)
tree7672b44eeacdcb08ebab47e90b6b391f06769f40
parent27ff61d012740dcdb8f5cf6421c22f746d056fe1 (diff)
downloadlvm2-0cbb381e159f0606ec749697a596d2a6cc814283.tar.gz
lvcreate: regression fix on lv name limits
When we are given an existing LV name - it needs to be allowed to pass in even restricted name as the LV could have existed long before we introduced some new restriction on prefix/suffix.i Fix the regression on name limits and drop restriction to be applied on any existing LVs - only the new created LV names have to be complient with current name restrictions. FIXME: we are currently using restricted names incorrectly in few other places - device_is_usable() skips restricted names, and udev flags are also incorrectly set for restricted names so these LVs are not getting links properly.
-rw-r--r--lib/metadata/lv_manip.c6
-rw-r--r--tools/lvcreate.c3
-rw-r--r--tools/toollib.c3
3 files changed, 9 insertions, 3 deletions
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index 892f7ca6c..f14cec0e1 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -7172,6 +7172,9 @@ struct logical_volume *lv_create_single(struct volume_group *vg,
!(lp->segtype = get_segtype_from_string(vg->cmd, "thin-pool")))
return_NULL;
+ if (lp->pool_name && !apply_lvname_restrictions(lp->pool_name))
+ return_NULL;
+
if (!(lv = _lv_create_an_lv(vg, lp, lp->pool_name)))
return_NULL;
@@ -7188,6 +7191,9 @@ struct logical_volume *lv_create_single(struct volume_group *vg,
"cache-pool")))
return_NULL;
+ if (lp->pool_name && !apply_lvname_restrictions(lp->pool_name))
+ return_NULL;
+
if (!(lv = _lv_create_an_lv(vg, lp, lp->pool_name)))
return_NULL;
diff --git a/tools/lvcreate.c b/tools/lvcreate.c
index 2fa791832..41b8ee349 100644
--- a/tools/lvcreate.c
+++ b/tools/lvcreate.c
@@ -54,6 +54,9 @@ static int _lvcreate_name_params(struct lvcreate_params *lp,
if (!validate_lvname_param(cmd, &lp->vg_name, &lp->lv_name))
return_0;
+ if (lp->lv_name && !apply_lvname_restrictions(lp->lv_name))
+ return_0;
+
lp->pool_name = arg_str_value(cmd, thinpool_ARG, NULL)
? : arg_str_value(cmd, cachepool_ARG, NULL);
if (!validate_lvname_param(cmd, &lp->vg_name, &lp->pool_name))
diff --git a/tools/toollib.c b/tools/toollib.c
index 1ee846998..3b1b00feb 100644
--- a/tools/toollib.c
+++ b/tools/toollib.c
@@ -1300,9 +1300,6 @@ int validate_lvname_param(struct cmd_context *cmd, const char **vg_name,
*lv_name = lvname;
}
- if (!apply_lvname_restrictions(*lv_name))
- return_0;
-
if (!validate_name(*lv_name)) {
log_error("Logical volume name \"%s\" is invalid.",
*lv_name);