f2fs: remain nat cache entries for further free nid allocation
authorJaegeuk Kim <jaegeuk.kim@samsung.com>
Thu, 21 Mar 2013 03:53:19 +0000 (12:53 +0900)
committerJaegeuk Kim <jaegeuk.kim@samsung.com>
Wed, 27 Mar 2013 00:16:18 +0000 (09:16 +0900)
In the checkpoint flow, the f2fs investigates the total nat cache entries.
Previously, if an entry has NULL_ADDR, f2fs drops the entry and adds the
obsolete nid to the free nid list.
However, this free nid will be reused sooner, resulting in its nat entry miss.
In order to avoid this, we don't need to drop the nat cache entry at this moment.

Reviewed-by: Namjae Jeon <namjae.jeon@samsung.com>
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
fs/f2fs/node.c

index f7b03ba9c0d740a11adacedbb3509ca1e37679ef..0177f9434c25fa2c16a26999f4be229141581350 100644 (file)
@@ -1621,11 +1621,11 @@ flush_now:
                        nid_in_journal(sum, offset) = cpu_to_le32(nid);
                }
 
-               if (nat_get_blkaddr(ne) == NULL_ADDR) {
+               if (nat_get_blkaddr(ne) == NULL_ADDR &&
+                                       !add_free_nid(NM_I(sbi), nid)) {
                        write_lock(&nm_i->nat_tree_lock);
                        __del_from_nat_cache(nm_i, ne);
                        write_unlock(&nm_i->nat_tree_lock);
-                       add_free_nid(NM_I(sbi), nid);
                } else {
                        write_lock(&nm_i->nat_tree_lock);
                        __clear_nat_cache_dirty(nm_i, ne);