summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2016-03-08 10:13:38 +0100
committerZdenek Kabelac <zkabelac@redhat.com>2016-03-10 18:38:53 +0100
commit70cbd8f1a5cc6abb418a90529bc12a2813806f13 (patch)
tree40bf38a34aa034a086c1a57da530f1269d2c1be3
parent5c415afd852b6d39021f97f63401a37e6408bf70 (diff)
downloadlvm2-70cbd8f1a5cc6abb418a90529bc12a2813806f13.tar.gz
lvconvert: improve vg parameter parsing
Commit abd9618dd8b77ca1974074ae76fa6a08f1a687d9 tried to improve parsing of vg name from logical path - but still missed couple corner cases. This patch further improves the logic and reuses validate_lvname_param() for parsing of lv_name. Also explicitly checks for LVM_VG_NAME in the right case. So now also properly parses cases like: 'lvconvert --repairt vg/' and will provide correct error message.
-rw-r--r--WHATS_NEW1
-rw-r--r--tools/lvconvert.c25
2 files changed, 11 insertions, 15 deletions
diff --git a/WHATS_NEW b/WHATS_NEW
index e5b28bb7e..eab40b193 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.146 -
=================================
+ Another attempt to improve VG name parsing for lvconvert (2.02.144).
Use new cache status info and skip flushing for failed cache.
Support --uncache with missing PVs.
Tidy report field names, headings and widths.
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index 2b5080f54..dc6cb480c 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -115,9 +115,6 @@ static int _lvconvert_name_params(struct lvconvert_params *lp,
struct cmd_context *cmd,
int *pargc, char ***pargv)
{
- char *ptr;
- const char *vg_name = NULL;
-
if (lp->merge) {
if (!*pargc) {
log_error("Please specify a logical volume path.");
@@ -174,26 +171,24 @@ static int _lvconvert_name_params(struct lvconvert_params *lp,
if (!validate_restricted_lvname_param(cmd, &lp->vg_name, &lp->lv_split_name))
return_0;
- if ((vg_name = extract_vgname(cmd, lp->lv_name_full)) &&
- lp->vg_name && strcmp(vg_name, lp->vg_name)) {
- log_error("Please use a single volume group name "
- "(\"%s\" or \"%s\")", vg_name, lp->vg_name);
- return 0;
+ if (!lp->vg_name && !strchr(lp->lv_name_full, '/')) {
+ /* Check for $LVM_VG_NAME */
+ if (!(lp->vg_name = extract_vgname(cmd, NULL))) {
+ log_error("Please specify a logical volume path.");
+ return 0;
+ }
}
- if (!lp->vg_name)
- lp->vg_name = vg_name;
+ if (!validate_lvname_param(cmd, &lp->vg_name, &lp->lv_name_full))
+ return_0;
+
+ lp->lv_name = lp->lv_name_full;
if (!validate_name(lp->vg_name)) {
log_error("Please provide a valid volume group name");
return 0;
}
- if ((ptr = strrchr(lp->lv_name_full, '/')))
- lp->lv_name = ptr + 1;
- else
- lp->lv_name = lp->lv_name_full;
-
if (!lp->merge_mirror &&
!lp->repair &&
!arg_count(cmd, splitmirrors_ARG) &&