[lvm-devel] master - thin: lvcreate improve check of thin params

Zdenek Kabelac zkabelac at fedoraproject.org
Mon Oct 6 13:32:44 UTC 2014


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=1ef660be460a6dcd876f8077bac9478aca6df3e5
Commit:        1ef660be460a6dcd876f8077bac9478aca6df3e5
Parent:        487723e0dfbaf23236e7ea1415497a8bb394440d
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Mon Oct 6 13:13:01 2014 +0200
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Mon Oct 6 14:53:16 2014 +0200

thin: lvcreate improve check of thin params

Use arg_from_list_is_set()
Resolve pool_lv at one single place.
Replace use of find_lv_in_vg() with find_lv().
---
 tools/lvcreate.c |   47 +++++++++++++++++++++--------------------------
 1 files changed, 21 insertions(+), 26 deletions(-)

diff --git a/tools/lvcreate.c b/tools/lvcreate.c
index fe405ea..9e2c85c 100644
--- a/tools/lvcreate.c
+++ b/tools/lvcreate.c
@@ -1059,8 +1059,7 @@ static int _lvcreate_params(struct lvcreate_params *lp,
 static int _check_thin_parameters(struct volume_group *vg, struct lvcreate_params *lp,
 				  struct lvcreate_cmdline_params *lcp)
 {
-	struct lv_list *lvl;
-	unsigned i;
+	struct logical_volume *pool_lv = NULL;
 
 	if (!lp->thin && !lp->create_pool && !lp->snapshot) {
 		log_error("Please specify device size(s).");
@@ -1072,26 +1071,22 @@ static int _check_thin_parameters(struct volume_group *vg, struct lvcreate_param
 		return 0;
 	}
 
+	if (lp->pool)
+		pool_lv = find_lv(vg, lp->pool);
+
 	if (!lp->create_pool) {
-		static const int _argname[] = {
-			alloc_ARG,
-			chunksize_ARG,
-			contiguous_ARG,
-			discards_ARG,
-			poolmetadatasize_ARG,
-			poolmetadataspare_ARG,
-			stripes_ARG,
-			stripesize_ARG,
-			zero_ARG
-		};
-
-		for (i = 0; i < DM_ARRAY_SIZE(_argname); ++i) {
-			if (arg_count(vg->cmd, _argname[i])) {
-				log_error("%s is only available for thin pool creation.",
-					  arg_long_option_name(_argname[i]));
-				return 0;
-			}
-		}
+		if (arg_from_list_is_set(vg->cmd, "is only available with thin pool creation",
+					 alloc_ARG,
+					 chunksize_ARG,
+					 contiguous_ARG,
+					 discards_ARG,
+					 poolmetadatasize_ARG,
+					 poolmetadataspare_ARG,
+					 stripes_ARG,
+					 stripesize_ARG,
+					 zero_ARG,
+					 -1))
+			return_0;
 
 		if (lcp->pv_count) {
 			log_error("Only specify Physical volumes when allocating the thin pool.");
@@ -1103,17 +1098,17 @@ static int _check_thin_parameters(struct volume_group *vg, struct lvcreate_param
 			return 0;
 		}
 
-		if (!(lvl = find_lv_in_vg(vg, lp->pool))) {
+		if (!pool_lv) {
 			log_error("Thin pool %s not found in Volume group %s.", lp->pool, vg->name);
 			return 0;
 		}
 
-		if (!lv_is_thin_pool(lvl->lv)) {
-			log_error("Logical volume %s is not a thin pool.", lp->pool);
+		if (!lv_is_thin_pool(pool_lv)) {
+			log_error("Logical volume %s is not a thin pool.", display_lvname(pool_lv));
 			return 0;
 		}
-	} else if (lp->pool && find_lv_in_vg(vg, lp->pool)) {
-		log_error("Thin pool %s already exists in Volume group %s.", lp->pool, vg->name);
+	} else if (pool_lv) {
+		log_error("Logical volume %s already exists in Volume group %s.", lp->pool, vg->name);
 		return 0;
 	}
 




More information about the lvm-devel mailing list