This patch enable ssa journal with nat bits, which is
benifit for nat metadata write.

Signed-off-by: Yunlei He <[email protected]>
---
 fs/f2fs/node.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 681552b..220110a 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -2446,7 +2446,7 @@ static void __adjust_nat_entry_set(struct nat_entry_set 
*nes,
 }
 
 static void __update_nat_bits(struct f2fs_sb_info *sbi, nid_t start_nid,
-                                               struct page *page)
+                                       struct page *page, bool to_journal)
 {
        struct f2fs_nm_info *nm_i = NM_I(sbi);
        unsigned int nat_index = start_nid / NAT_ENTRY_PER_BLOCK;
@@ -2457,6 +2457,12 @@ static void __update_nat_bits(struct f2fs_sb_info *sbi, 
nid_t start_nid,
        if (!enabled_nat_bits(sbi, NULL))
                return;
 
+       if (to_journal) {
+               __clear_bit_le(nat_index, nm_i->full_nat_bits);
+               __clear_bit_le(nat_index, nm_i->empty_nat_bits);
+               return;
+       }
+
        if (nat_index == 0) {
                valid = 1;
                i = 1;
@@ -2494,8 +2500,7 @@ static void __flush_nat_entry_set(struct f2fs_sb_info 
*sbi,
         * #1, flush nat entries to journal in current hot data summary block.
         * #2, flush nat entries to nat page.
         */
-       if (enabled_nat_bits(sbi, cpc) ||
-               !__has_cursum_space(journal, set->entry_cnt, NAT_JOURNAL))
+       if (!__has_cursum_space(journal, set->entry_cnt, NAT_JOURNAL))
                to_journal = false;
 
        if (to_journal) {
@@ -2535,11 +2540,11 @@ static void __flush_nat_entry_set(struct f2fs_sb_info 
*sbi,
                }
        }
 
+       __update_nat_bits(sbi, start_nid, page, to_journal);
        if (to_journal) {
                up_write(&curseg->journal_rwsem);
        } else {
                scan_nat_page(sbi, page, start_nid, false);
-               __update_nat_bits(sbi, start_nid, page);
                f2fs_put_page(page, 1);
        }
 
@@ -2574,8 +2579,7 @@ void flush_nat_entries(struct f2fs_sb_info *sbi, struct 
cp_control *cpc)
         * entries, remove all entries from journal and merge them
         * into nat entry set.
         */
-       if (enabled_nat_bits(sbi, cpc) ||
-               !__has_cursum_space(journal, nm_i->dirty_nat_cnt, NAT_JOURNAL))
+       if (!__has_cursum_space(journal, nm_i->dirty_nat_cnt, NAT_JOURNAL))
                remove_nats_in_journal(sbi);
 
        while ((found = __gang_lookup_nat_set(nm_i,
-- 
1.9.1


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to