This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

FDS garbage collection not clearing dirty records

Hi below is the function i am using to run garbage collection after deleting the data but the result i am getting was the same as before garbage collection.

I mean DIRTY_RECORDS_BEFORE_GC = DIRTY_RECORDS_AFTER_GC.

static void delete_all() {
  NRF_LOG_INFO("deleting all records...");
  ret_code_t rc;
  bool next_record = true;
  while (next_record) {
    fds_record_desc_t record_desc = {0};
    fds_find_token_t ftok = {0};
    if (fds_record_iterate(&record_desc, &ftok) == FDS_SUCCESS) {
      ret_code_t ret = fds_record_delete(&record_desc);
      while (!fds_delete_complete)
        ;
      fds_delete_complete = false;
      //NRF_LOG_INFO("Iterate suc..");
      next_record = true;
    } else {
      next_record = false;
    }
  }
  fds_stat_t stat = {0};
  rc = fds_stat(&stat);
  APP_ERROR_CHECK(rc);
  uint16_t no_of_records = stat.valid_records;
  NRF_LOG_INFO("delete all:: %d", no_of_records);
  NRF_LOG_INFO("dirty records %d", stat.dirty_records);
  fds_gc();
  while (!fds_gc_complete);
  fds_gc_complete = false;
    rc = fds_stat(&stat);
    APP_ERROR_CHECK(rc);
    NRF_LOG_INFO("dirty records after gc %d", stat.dirty_records);
}
 

Do i need to reinitialize the fds again to get proper dirty records value?

Related