diff --git a/source/ftl/ftl.c b/source/ftl/ftl.c index 84f8aa7..2b668d9 100644 --- a/source/ftl/ftl.c +++ b/source/ftl/ftl.c @@ -175,8 +175,6 @@ int ftl_trim(struct ftl_map *map, uint32_t va) return ret; } - --map->nused_pages; - for (i = 0; i < 32; ++i) { level = 32 - i - 1; @@ -186,6 +184,7 @@ int ftl_trim(struct ftl_map *map, uint32_t va) if (i == 32) { map->root = UINT32_MAX; + map->nused_pages = 0; memset(&page_desc, 0xff, sizeof page_desc); page_desc.nused_pages = 0; @@ -196,6 +195,8 @@ int ftl_trim(struct ftl_map *map, uint32_t va) if (read_page_desc(map, &alt_page_desc, alt_page) < 0) return -1; + --map->nused_pages; + page_desc.va = alt_page_desc.va; page_desc.nused_pages = map->nused_pages; page_desc.subtrees[level] = UINT32_MAX;