[lvm-devel] master - lvcreate: cachemode writeback and cachepolicy cleaner is invalid

David Teigland teigland at sourceware.org
Fri May 5 15:00:53 UTC 2017


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=df5fd5ae8843e6bbbe7f61c4919a594693639a60
Commit:        df5fd5ae8843e6bbbe7f61c4919a594693639a60
Parent:        7fbeea30e5ce4dbb4877910877575ed6c37dfb8c
Author:        David Teigland <teigland at redhat.com>
AuthorDate:    Fri May 5 09:59:12 2017 -0500
Committer:     David Teigland <teigland at redhat.com>
CommitterDate: Fri May 5 09:59:12 2017 -0500

lvcreate: cachemode writeback and cachepolicy cleaner is invalid

Return an error if lvconvert is used to create a cache pool
with that combination.
---
 tools/toollib.c |   18 +++++++++++++-----
 1 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/tools/toollib.c b/tools/toollib.c
index f3cf4ca..e5a854f 100644
--- a/tools/toollib.c
+++ b/tools/toollib.c
@@ -1335,9 +1335,17 @@ int get_stripe_params(struct cmd_context *cmd, const struct segment_type *segtyp
 	return _validate_stripe_params(cmd, segtype, stripes, stripe_size);
 }
 
-static int _validate_cachepool_params(const char *name,
-				      const struct dm_config_tree *settings)
+static int _validate_cachepool_params(const char *policy_name, cache_mode_t cache_mode)
 {
+	/*
+	 * FIXME: it might be nice if cmd def rules could check option values,
+	 * then a rule could do this.
+	 */
+	if ((cache_mode == CACHE_MODE_WRITEBACK) && policy_name && !strcmp(policy_name, "cleaner")) {
+		log_error("Cache mode \"writeback\" is not compatible with cache policy \"cleaner\".");
+		return 0;
+	}
+
 	return 1;
 }
 
@@ -1371,6 +1379,9 @@ int get_cache_params(struct cmd_context *cmd,
 
 	*name = arg_str_value(cmd, cachepolicy_ARG, NULL);
 
+	if (!_validate_cachepool_params(*name, *cache_mode))
+		goto_out;
+
 	dm_list_iterate_items(group, &cmd->arg_value_groups) {
 		if (!grouped_arg_is_set(group->arg_values, cachesettings_ARG))
 			continue;
@@ -1401,9 +1412,6 @@ int get_cache_params(struct cmd_context *cmd,
 			cn->child = result->root;
 			result->root = cn;
 		}
-
-		if (!_validate_cachepool_params(*name, result))
-			goto_out;
 	}
 
 	ok = 1;




More information about the lvm-devel mailing list