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.");
+ }
}
{