[lvm-devel] master - cache: add cache_mode_num_to_str

David Teigland teigland at sourceware.org
Tue Nov 6 21:42:36 UTC 2018


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=8d7075528f0c6e3a0ddeb737c25540683a1946a2
Commit:        8d7075528f0c6e3a0ddeb737c25540683a1946a2
Parent:        a427a935493aa2d92c85f1765aaf714e073d88bc
Author:        David Teigland <teigland at redhat.com>
AuthorDate:    Mon Nov 5 14:53:52 2018 -0600
Committer:     David Teigland <teigland at redhat.com>
CommitterDate: Tue Nov 6 11:36:28 2018 -0600

cache: add cache_mode_num_to_str

Requires only string and number, no specific lv/seg type.
---
 lib/metadata/cache_manip.c       |   50 ++++++++++++++++++++++++++-----------
 lib/metadata/metadata-exported.h |    1 +
 2 files changed, 36 insertions(+), 15 deletions(-)

diff --git a/lib/metadata/cache_manip.c b/lib/metadata/cache_manip.c
index 5ba353c..0cf94ae 100644
--- a/lib/metadata/cache_manip.c
+++ b/lib/metadata/cache_manip.c
@@ -30,33 +30,53 @@
 #define DM_HINT_OVERHEAD_PER_BLOCK	8  /* bytes */
 #define DM_MAX_HINT_WIDTH		(4+16)  /* bytes.  FIXME Configurable? */
 
+const char *cache_mode_num_to_str(cache_mode_t mode)
+{
+	switch (mode) {
+	case CACHE_MODE_WRITETHROUGH:
+		return "writethrough";
+	case CACHE_MODE_WRITEBACK:
+		return "writeback";
+	case CACHE_MODE_PASSTHROUGH:
+		return "passthrough";
+	default:
+		return NULL;
+	}
+}
+
 const char *display_cache_mode(const struct lv_segment *seg)
 {
-	if (seg_is_cache(seg))
-		seg = first_seg(seg->pool_lv);
+	const struct lv_segment *setting_seg = NULL;
+	const char *str;
 
-	if (!seg_is_cache_pool(seg) ||
-	    (seg->cache_mode == CACHE_MODE_UNSELECTED))
+	if (seg_is_cache_pool(seg))
+		setting_seg = seg;
+
+	else if (seg_is_cache(seg))
+		setting_seg = first_seg(seg->pool_lv);
+
+	if (!setting_seg || (setting_seg->cache_mode == CACHE_MODE_UNSELECTED))
 		return "";
 
-	return get_cache_mode_name(seg);
-}
+	if (!(str = cache_mode_num_to_str(setting_seg->cache_mode))) {
+		log_error(INTERNAL_ERROR "Cache pool %s has undefined cache mode, using writethrough instead.",
+			  display_lvname(seg->lv));
+		str = "writethrough";
+	}
 
+	return str;
+}
 
 const char *get_cache_mode_name(const struct lv_segment *pool_seg)
 {
-	switch (pool_seg->cache_mode) {
-	default:
+	const char *str;
+		
+	if (!(str = cache_mode_num_to_str(pool_seg->cache_mode))) {
 		log_error(INTERNAL_ERROR "Cache pool %s has undefined cache mode, using writethrough instead.",
 			  display_lvname(pool_seg->lv));
-		/* Fall through */
-	case CACHE_MODE_WRITETHROUGH:
-		return "writethrough";
-	case CACHE_MODE_WRITEBACK:
-		return "writeback";
-	case CACHE_MODE_PASSTHROUGH:
-		return "passthrough";
+		str = "writethrough";
 	}
+	return str;
 }
 
 int set_cache_mode(cache_mode_t *mode, const char *cache_mode)
diff --git a/lib/metadata/metadata-exported.h b/lib/metadata/metadata-exported.h
index 840f623..76c164b 100644
--- a/lib/metadata/metadata-exported.h
+++ b/lib/metadata/metadata-exported.h
@@ -1216,6 +1216,7 @@ struct lv_status_cache {
 	dm_percent_t dirty_usage;
 };
 
+const char *cache_mode_num_to_str(cache_mode_t mode);
 const char *display_cache_mode(const struct lv_segment *seg);
 const char *get_cache_mode_name(const struct lv_segment *pool_seg);
 int set_cache_mode(cache_mode_t *mode, const char *cache_mode);




More information about the lvm-devel mailing list