[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