[lvm-devel] dev-lvmguy-lvchange1 - lvchange: tidy switches

Heinz Mauelshagen heinzm at sourceware.org
Tue Apr 4 22:28:26 UTC 2017


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=9b26c361e32bd45a1f87e676a45319bc143245b9
Commit:        9b26c361e32bd45a1f87e676a45319bc143245b9
Parent:        a12b3af033d8086e0399e5433a3307ebb05b9d0b
Author:        Heinz Mauelshagen <heinzm at redhat.com>
AuthorDate:    Wed Apr 5 00:28:08 2017 +0200
Committer:     Heinz Mauelshagen <heinzm at redhat.com>
CommitterDate: Wed Apr 5 00:28:08 2017 +0200

lvchange: tidy switches

---
 tools/lvchange.c |   87 ++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 58 insertions(+), 29 deletions(-)

diff --git a/tools/lvchange.c b/tools/lvchange.c
index c68ea98..18ad47b 100644
--- a/tools/lvchange.c
+++ b/tools/lvchange.c
@@ -956,6 +956,62 @@ static int _commit_reload(struct logical_volume *lv, uint32_t mr)
 	return 1;
 }
 
+static int _is_option_listed(int opt_enum, int *opts)
+{
+	int i;
+
+	for (i = 0; opts[i] != -1; i++)
+		if (opt_enum == opts[i])
+			return 1;
+
+	return 0;
+}
+
+/*
+ * Check @opt_enum is an option _not_ requiring per option commit/reload.
+ */
+static int _option_allows_group_commit(int opt_enum)
+{
+	int opts[] = {
+		permission_ARG,
+		alloc_ARG,
+		contiguous_ARG,
+		errorwhenfull_ARG,
+		readahead_ARG,
+		persistent_ARG,
+		addtag_ARG,
+		deltag_ARG,
+		writemostly_ARG,
+		writebehind_ARG,
+		minrecoveryrate_ARG,
+		maxrecoveryrate_ARG,
+		profile_ARG,
+		metadataprofile_ARG,
+		detachprofile_ARG,
+		setactivationskip_ARG,
+		-1
+	};
+
+	return _is_option_listed(opt_enum, opts);
+}
+
+/*
+ * Check @opt_enum is an option requiring per option commit/reload.
+ */
+static int _option_requires_direct_commit(int opt_enum)
+{
+	int opts[] = {
+		discards_ARG,
+		zero_ARG,
+		cachemode_ARG,
+		cachepolicy_ARG,
+		cachesettings_ARG,
+		-1
+	};
+
+	return _is_option_listed(opt_enum, opts);
+}
+
 /*
  * For each lvchange command definintion:
  *
@@ -1004,20 +1060,13 @@ static int _lvchange_properties_single(struct cmd_context *cmd,
 		if (!arg_is_set(cmd, opt_enum))
 			continue;
 
-		switch (opt_enum) {
 		/*
 		 * Skip options requiring per option commit/reload
 		 * to process them in the second step.
 		 */
-		case discards_ARG:
-		case zero_ARG:
-		case cachemode_ARG:
-		case cachepolicy_ARG:
-		case cachesettings_ARG:
+		if (_option_requires_direct_commit(opt_enum)) {
 			second_group++;
 			continue;
-		default:
-			break;
 		}
 
 		/* Archive will only happen once per run. */
@@ -1123,28 +1172,8 @@ static int _lvchange_properties_single(struct cmd_context *cmd,
 		if (!arg_is_set(cmd, opt_enum))
 			continue;
 
-		switch (opt_enum) {
-		/* Skip any of the already processed options */
-		case permission_ARG:
-		case alloc_ARG:
-		case contiguous_ARG:
-		case errorwhenfull_ARG:
-		case readahead_ARG:
-		case persistent_ARG:
-		case addtag_ARG:
-		case deltag_ARG:
-		case writemostly_ARG:
-		case writebehind_ARG:
-		case minrecoveryrate_ARG:
-		case maxrecoveryrate_ARG:
-		case profile_ARG:
-		case metadataprofile_ARG:
-		case detachprofile_ARG:
-		case setactivationskip_ARG:
+		if (_option_allows_group_commit(opt_enum))
 			continue;
-		default:
-			break;
-		}
 
 		/* Archive will only happen once per run */
 		if (!archive(lv->vg))




More information about the lvm-devel mailing list