1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

writecache: look for settings in lvm.conf

Restore the lvm.conf cache_settings for writecache
added by c6639056e0.
Shorter method reduces and isolates the complexity
of config trees.
This commit is contained in:
David Teigland 2022-01-31 16:12:24 -06:00
parent ffa07c8e39
commit f0cd54a873
2 changed files with 47 additions and 0 deletions

View File

@ -1,5 +1,6 @@
Version 2.03.15 - Version 2.03.15 -
=================================== ===================================
Improve support for metadata profiles for --type writecache.
Use cache or active DM device when available with new kernels. Use cache or active DM device when available with new kernels.
Introduce function to utilize UUIDs from DM_DEVICE_LIST. Introduce function to utilize UUIDs from DM_DEVICE_LIST.
Increase some hash table size to better support large device sets. Increase some hash table size to better support large device sets.

View File

@ -1317,12 +1317,15 @@ static int _get_one_writecache_setting(struct cmd_context *cmd, struct writecach
int get_writecache_settings(struct cmd_context *cmd, struct writecache_settings *settings, int get_writecache_settings(struct cmd_context *cmd, struct writecache_settings *settings,
uint32_t *block_size_sectors) uint32_t *block_size_sectors)
{ {
const struct dm_config_node *cns, *cn1, *cn2;
struct arg_value_group_list *group; struct arg_value_group_list *group;
const char *str; const char *str;
char key[64]; char key[64];
char val[64]; char val[64];
int num; int num;
int pos; int pos;
int rn;
int found = 0;
/* /*
* "grouped" means that multiple --cachesettings options can be used. * "grouped" means that multiple --cachesettings options can be used.
@ -1354,8 +1357,51 @@ int get_writecache_settings(struct cmd_context *cmd, struct writecache_settings
if (!_get_one_writecache_setting(cmd, settings, key, val, block_size_sectors)) if (!_get_one_writecache_setting(cmd, settings, key, val, block_size_sectors))
return_0; return_0;
} }
found = 1;
} }
if (found)
goto out;
/*
* If there were no settings on the command line, look for settings in
* lvm.conf
*
* TODO: support profiles
*/
if (!(cns = find_config_tree_node(cmd, allocation_cache_settings_CFG_SECTION, NULL)))
goto out;
for (cn1 = cns->child; cn1; cn1 = cn1->sib) {
if (!cn1->child)
continue; /* Ignore section without settings */
if (cn1->v || strcmp(cn1->key, "writecache") != 0)
continue; /* Ignore non-matching settings */
cn2 = cn1->child;
for (; cn2; cn2 = cn2->sib) {
memset(val, 0, sizeof(val));
if (cn2->v->type == DM_CFG_INT)
rn = dm_snprintf(val, sizeof(val), FMTd64, cn2->v->v.i);
else if (cn2->v->type == DM_CFG_STRING)
rn = dm_snprintf(val, sizeof(val), "%s", cn2->v->v.str);
else
rn = -1;
if (rn < 0) {
log_error("Invalid lvm.conf writecache setting value for %s.", cn2->key);
return 0;
}
if (!_get_one_writecache_setting(cmd, settings, (char *)cn2->key, val, block_size_sectors))
return_0;
}
}
out:
if (settings->high_watermark_set && settings->low_watermark_set && if (settings->high_watermark_set && settings->low_watermark_set &&
(settings->high_watermark <= settings->low_watermark)) { (settings->high_watermark <= settings->low_watermark)) {
log_error("High watermark must be greater than low watermark."); log_error("High watermark must be greater than low watermark.");