[lvm-devel] master - lvchange: tidy switch code in _lvchange_properties_single()

Heinz Mauelshagen heinzm at sourceware.org
Wed Apr 5 15:30:49 UTC 2017


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=c9bc1c1c8ccd624762b59a46689467573bc2933e
Commit:        c9bc1c1c8ccd624762b59a46689467573bc2933e
Parent:        6fdc391baec1129d0c70913f116c04f928d083fa
Author:        Heinz Mauelshagen <heinzm at redhat.com>
AuthorDate:    Wed Apr 5 17:29:31 2017 +0200
Committer:     Heinz Mauelshagen <heinzm at redhat.com>
CommitterDate: Wed Apr 5 17:29:31 2017 +0200

lvchange: tidy switch code in _lvchange_properties_single()

---
 tools/lvchange.c |   91 +++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 59 insertions(+), 32 deletions(-)

diff --git a/tools/lvchange.c b/tools/lvchange.c
index 1778b52..a35891e 100644
--- a/tools/lvchange.c
+++ b/tools/lvchange.c
@@ -974,6 +974,58 @@ static int _commit_reload(struct logical_volume *lv, uint32_t mr)
 	return 1;
 }
 
+/* Helper: check @opt_num is listed in @opts array */
+static int _is_option_listed(int opt_enum, int *options)
+{
+	int i;
+
+	for (i = 0; options[i] != -1; i++)
+		if (opt_enum == options[i])
+			return 1;
+	return 0;
+}
+
+/* Check @opt_enum is an option allowing group commit/reload */
+static int _option_allows_group_commit(int opt_enum)
+{
+	int options[] = {
+		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, options);
+}
+
+/* Check @opt_enum requires direct commit/reload */
+static int _option_requires_direct_commit(int opt_enum)
+{
+	int options[] = {
+		discards_ARG,
+		zero_ARG,
+		cachemode_ARG,
+		cachepolicy_ARG,
+		cachesettings_ARG,
+		-1
+	};
+
+	return _is_option_listed(opt_enum, options);
+}
+
 /*
  * For each lvchange command definintion:
  *
@@ -1022,20 +1074,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
+		 * Skip options requiring direct 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. */
@@ -1141,28 +1186,9 @@ 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:
+		/* Skip any of the already processed options which allowed for group commit/reload */
+		if (_option_allows_group_commit(opt_enum))
 			continue;
-		default:
-			break;
-		}
 
 		/* Archive will only happen once per run */
 		if (!archive(lv->vg))
@@ -1170,8 +1196,8 @@ static int _lvchange_properties_single(struct cmd_context *cmd,
 
 		mr = 0;
 
+		/* Run commit and reload after processing each of the following options */
 		switch (opt_enum) {
-		/* Process the following options which need per option metadata commit and reload */
 		case discards_ARG:
 		case zero_ARG:
 			docmds++;
@@ -1186,7 +1212,8 @@ static int _lvchange_properties_single(struct cmd_context *cmd,
 			break;
 
 		default:
-			break;
+			log_error(INTERNAL_ERROR "Failed to check for option %s",
+				  arg_long_option_name(i));
 		}
 
 		/* Display any logical volume change unless already displayed in step 1. */




More information about the lvm-devel mailing list