[lvm-devel] master - lvconvert: improve vg parameter parsing
Zdenek Kabelac
zkabelac at fedoraproject.org
Thu Mar 10 17:40:07 UTC 2016
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=70cbd8f1a5cc6abb418a90529bc12a2813806f13
Commit: 70cbd8f1a5cc6abb418a90529bc12a2813806f13
Parent: 5c415afd852b6d39021f97f63401a37e6408bf70
Author: Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate: Tue Mar 8 10:13:38 2016 +0100
Committer: Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Thu Mar 10 18:38:53 2016 +0100
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.
---
WHATS_NEW | 1 +
tools/lvconvert.c | 25 ++++++++++---------------
2 files changed, 11 insertions(+), 15 deletions(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index e5b28bb..eab40b1 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 2b5080f..dc6cb48 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) &&
More information about the lvm-devel
mailing list