summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDavid Teigland <teigland@redhat.com>2022-12-08 16:42:04 -0600
committerDavid Teigland <teigland@redhat.com>2022-12-08 16:53:36 -0600
commitfa7fe5cbbe927d13a8b93aba24640ce5d8c11896 (patch)
treed60e60cc263ffe4357c24bcd0ab71b94a6e46268 /lib
parent9ce55a43d0165da9827e7b8e75bf25583a571e89 (diff)
downloadlvm2-fa7fe5cbbe927d13a8b93aba24640ce5d8c11896.tar.gz
writecache: support settings metadata_only and pause_writeback
Two new settings for tuning dm-writecache.
Diffstat (limited to 'lib')
-rw-r--r--lib/metadata/writecache_manip.c8
-rw-r--r--lib/writecache/writecache.c20
2 files changed, 28 insertions, 0 deletions
diff --git a/lib/metadata/writecache_manip.c b/lib/metadata/writecache_manip.c
index 8150d0781..21b7940fb 100644
--- a/lib/metadata/writecache_manip.c
+++ b/lib/metadata/writecache_manip.c
@@ -518,6 +518,14 @@ int writecache_settings_to_str_list(struct writecache_settings *settings, struct
if (!_writecache_setting_str_list_add("max_age", (uint64_t)settings->max_age, NULL, result, mem))
errors++;
+ if (settings->metadata_only_set)
+ if (!_writecache_setting_str_list_add("metadata_only", (uint64_t)settings->metadata_only, NULL, result, mem))
+ errors++;
+
+ if (settings->pause_writeback_set)
+ if (!_writecache_setting_str_list_add("pause_writeback", (uint64_t)settings->pause_writeback, NULL, result, mem))
+ errors++;
+
if (settings->new_key && settings->new_val)
if (!_writecache_setting_str_list_add(settings->new_key, 0, settings->new_val, result, mem))
errors++;
diff --git a/lib/writecache/writecache.c b/lib/writecache/writecache.c
index aa2113271..8ccaca2d0 100644
--- a/lib/writecache/writecache.c
+++ b/lib/writecache/writecache.c
@@ -135,6 +135,18 @@ static int _writecache_text_import(struct lv_segment *seg,
seg->writecache_settings.max_age_set = 1;
}
+ if (dm_config_has_node(sn, "metadata_only")) {
+ if (!dm_config_get_uint32(sn, "metadata_only", &seg->writecache_settings.metadata_only))
+ return SEG_LOG_ERROR("Unknown writecache_setting in");
+ seg->writecache_settings.metadata_only_set = 1;
+ }
+
+ if (dm_config_has_node(sn, "pause_writeback")) {
+ if (!dm_config_get_uint32(sn, "pause_writeback", &seg->writecache_settings.pause_writeback))
+ return SEG_LOG_ERROR("Unknown writecache_setting in");
+ seg->writecache_settings.pause_writeback_set = 1;
+ }
+
if (dm_config_has_node(sn, "writecache_setting_key")) {
const char *key;
const char *val;
@@ -207,6 +219,14 @@ static int _writecache_text_export(const struct lv_segment *seg,
outf(f, "max_age = %u", seg->writecache_settings.max_age);
}
+ if (seg->writecache_settings.metadata_only_set) {
+ outf(f, "metadata_only = %u", seg->writecache_settings.metadata_only);
+ }
+
+ if (seg->writecache_settings.pause_writeback_set) {
+ outf(f, "pause_writeback = %u", seg->writecache_settings.pause_writeback);
+ }
+
if (seg->writecache_settings.new_key && seg->writecache_settings.new_val) {
outf(f, "writecache_setting_key = \"%s\"",
seg->writecache_settings.new_key);