From 88b8a0efc847487e13f6a6cb1d308e92177adb3b Mon Sep 17 00:00:00 2001 From: armink Date: Sat, 2 Oct 2021 14:22:20 +0800 Subject: [PATCH] [kvdb] Fix gc error when ENV full by @wu1045718093 on https://github.com/armink/EasyFlash/pull/113 . --- src/fdb_kvdb.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/fdb_kvdb.c b/src/fdb_kvdb.c index 3d764e8..4faa63c 100644 --- a/src/fdb_kvdb.c +++ b/src/fdb_kvdb.c @@ -973,11 +973,16 @@ static uint32_t new_kv(fdb_kvdb_t db, kv_sec_info_t sector, size_t kv_size) __retry: - if ((empty_kv = alloc_kv(db, sector, kv_size)) == FAILED_ADDR && db->gc_request && !already_gc) { - FDB_DEBUG("Warning: Alloc an KV (size %u) failed when new KV. Now will GC then retry.\n", (uint32_t)kv_size); - gc_collect(db); - already_gc = true; - goto __retry; + if ((empty_kv = alloc_kv(db, sector, kv_size)) == FAILED_ADDR) { + if (db->gc_request && !already_gc) { + FDB_DEBUG("Warning: Alloc an KV (size %u) failed when new KV. Now will GC then retry.\n", (uint32_t)kv_size); + gc_collect(db); + already_gc = true; + goto __retry; + } else if (already_gc) { + FDB_DEBUG("Error: Alloc an KV (size %u) failed after GC. KV full.\n", kv_size); + db->gc_request = false; + } } return empty_kv;