From 775b2457d7e9dad966eaf3ca0adf9f3a47e70df8 Mon Sep 17 00:00:00 2001 From: Marek Pieta Date: Thu, 21 May 2020 05:32:14 -0700 Subject: [PATCH] settings_fcb: Fix storing the data Change fixes storing the data by adding missing write retry after the last compression. Without the change error was returned instead of retrying. Signed-off-by: Marek Pieta --- subsys/settings/src/settings_fcb.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/subsys/settings/src/settings_fcb.c b/subsys/settings/src/settings_fcb.c index 1a35c36bbaa..a3d5d3a3900 100644 --- a/subsys/settings/src/settings_fcb.c +++ b/subsys/settings/src/settings_fcb.c @@ -317,12 +317,16 @@ static int settings_fcb_save_priv(struct settings_store *cs, const char *name, wbs = cf->cf_fcb.f_align; len = settings_line_len_calc(name, val_len); - for (i = 0; i < cf->cf_fcb.f_sector_cnt - 1; i++) { + for (i = 0; i < cf->cf_fcb.f_sector_cnt; i++) { rc = fcb_append(&cf->cf_fcb, len, &loc.loc); if (rc != -ENOSPC) { break; } - settings_fcb_compress(cf); + + /* FCB can compress up to cf->cf_fcb.f_sector_cnt - 1 times. */ + if (i < (cf->cf_fcb.f_sector_cnt - 1)) { + settings_fcb_compress(cf); + } } if (rc) { return -EINVAL;