diff --git a/man/ostree.repo-config.xml b/man/ostree.repo-config.xml index 602d412e..4aedc138 100644 --- a/man/ostree.repo-config.xml +++ b/man/ostree.repo-config.xml @@ -121,7 +121,10 @@ Boston, MA 02111-1307, USA. min-free-space-percent Integer percentage value (0-99) that specifies a minimum percentage of total space (in blocks) in the underlying filesystem to - keep free. The default value is 3. + keep free. The default value is 3. + In case this option is co-existing with min-free-space-size (see below), + it would be ignored and min-free-space-size check would be enforced instead. + diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c index cae38e6d..f4dcb703 100644 --- a/src/libostree/ostree-repo.c +++ b/src/libostree/ostree-repo.c @@ -2818,12 +2818,10 @@ reload_core_config (OstreeRepo *self, } { - if (g_key_file_has_key (self->config, "core", "min-free-space-size", NULL) && - g_key_file_has_key (self->config, "core", "min-free-space-percent", NULL)) - { - return glnx_throw (error, "min-free-space-percent and min-free-space-size are mutually exclusive"); - } - else if (g_key_file_has_key (self->config, "core", "min-free-space-size", NULL)) + /* Try to parse both min-free-space-* config options first. If both are absent, fallback on 3% free space. + * If both are present and are non-zero, use min-free-space-size unconditionally and display a warning. + */ + if (g_key_file_has_key (self->config, "core", "min-free-space-size", NULL)) { g_autofree char *min_free_space_size_str = NULL; @@ -2835,21 +2833,31 @@ reload_core_config (OstreeRepo *self, if (!min_free_space_size_validate_and_convert (self, min_free_space_size_str, error)) return glnx_prefix_error (error, "Invalid min-free-space-size '%s'", min_free_space_size_str); } - else + + if (g_key_file_has_key (self->config, "core", "min-free-space-percent", NULL)) { g_autofree char *min_free_space_percent_str = NULL; - /* If changing this, be sure to change the man page too */ - const char *default_min_free_space = "3"; if (!ot_keyfile_get_value_with_default (self->config, "core", "min-free-space-percent", - default_min_free_space, - &min_free_space_percent_str, error)) + NULL, &min_free_space_percent_str, error)) return FALSE; self->min_free_space_percent = g_ascii_strtoull (min_free_space_percent_str, NULL, 10); if (self->min_free_space_percent > 99) return glnx_throw (error, "Invalid min-free-space-percent '%s'", min_free_space_percent_str); } + else if (!g_key_file_has_key (self->config, "core", "min-free-space-size", NULL)) + { + /* Default fallback of 3% free space. If changing this, be sure to change the man page too */ + self->min_free_space_percent = 3; + self->min_free_space_mb = 0; + } + + if (self->min_free_space_percent != 0 && self->min_free_space_mb != 0) + { + self->min_free_space_percent = 0; + g_debug ("Both min-free-space-percent and -size are mentioned in config. Enforcing min-free-space-size check only."); + } } {