[lvm-devel] master - cache: runtime detect default policy

Zdenek Kabelac zkabelac at fedoraproject.org
Wed Aug 12 12:40:55 UTC 2015


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=feb8e9a7907c91bd55769b4e3ae625434f2ba589
Commit:        feb8e9a7907c91bd55769b4e3ae625434f2ba589
Parent:        8a74d1ec79d209aa8bce51821836179afe7d48f9
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Sun Jul 26 23:05:11 2015 +0200
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Wed Aug 12 14:11:17 2015 +0200

cache: runtime detect default policy

When the policy is not preset in lvm.conf,
detect in runtime whether to use 'mq' or
new available 'smq'.
---
 WHATS_NEW           |    1 +
 lib/config/config.c |   22 +++++++++++++++++++++-
 2 files changed, 22 insertions(+), 1 deletions(-)

diff --git a/WHATS_NEW b/WHATS_NEW
index 347fcd4..da0ef4d 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.02.128 - 
 ===================================
+  Runtime detect presence of cache smq policy.
   Add demo cache-mq  and cache-smq profiles.
   Add cmd profilable allocation/cache_policy,cache_settings,cache_mode.
   Require cache_check 0.5.4 for use of --clear-needs-check-flag.
diff --git a/lib/config/config.c b/lib/config/config.c
index 436efff..cd6c1d8 100644
--- a/lib/config/config.c
+++ b/lib/config/config.c
@@ -23,6 +23,7 @@
 #include "toolcontext.h"
 #include "lvm-file.h"
 #include "memlock.h"
+#include "segtype.h"
 
 #include <sys/stat.h>
 #include <sys/mman.h>
@@ -2418,5 +2419,24 @@ int get_default_allocation_cache_pool_chunk_size_CFG(struct cmd_context *cmd, st
 
 const char *get_default_allocation_cache_policy_CFG(struct cmd_context *cmd, struct profile *profile)
 {
-	return DEFAULT_CACHE_POLICY;
+	const struct segment_type *segtype = get_segtype_from_string(cmd, "cache");
+	unsigned attr = ~0;
+
+	if (!segtype ||
+	    !segtype->ops->target_present ||
+	    !segtype->ops->target_present(cmd, NULL, &attr)) {
+		log_warn("WARNING: Cannot detect default cache policy, using \""
+			 DEFAULT_CACHE_POLICY "\".");
+		return DEFAULT_CACHE_POLICY;
+	}
+
+	if (attr & CACHE_FEATURE_POLICY_SMQ)
+		return "smq";
+
+	if (attr & CACHE_FEATURE_POLICY_MQ)
+		return "mq";
+
+	log_warn("WARNING: Default cache policy not available.");
+
+	return NULL;
 }




More information about the lvm-devel mailing list