OSDN Git Service

f2fs: no need to read nat block if nat_block_bitmap is set
authorYunlei He <heyunlei@huawei.com>
Fri, 17 Nov 2017 08:13:38 +0000 (16:13 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Thu, 8 Feb 2018 01:53:24 +0000 (17:53 -0800)
No need to read nat block if nat_block_bitmap is set.

Signed-off-by: Yunlei He <heyunlei@huawei.com>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/node.c

index dca6988..81972b1 100644 (file)
@@ -1952,9 +1952,6 @@ static void scan_nat_page(struct f2fs_sb_info *sbi,
        unsigned int nat_ofs = NAT_BLOCK_OFFSET(start_nid);
        int i;
 
-       if (test_bit_le(nat_ofs, nm_i->nat_block_bitmap))
-               return;
-
        __set_bit_le(nat_ofs, nm_i->nat_block_bitmap);
 
        i = start_nid % NAT_ENTRY_PER_BLOCK;
@@ -2059,10 +2056,13 @@ static void __build_free_nids(struct f2fs_sb_info *sbi, bool sync, bool mount)
        down_read(&nm_i->nat_tree_lock);
 
        while (1) {
-               struct page *page = get_current_nat_page(sbi, nid);
+               if (!test_bit_le(NAT_BLOCK_OFFSET(nid),
+                                               nm_i->nat_block_bitmap)) {
+                       struct page *page = get_current_nat_page(sbi, nid);
 
-               scan_nat_page(sbi, page, nid);
-               f2fs_put_page(page, 1);
+                       scan_nat_page(sbi, page, nid);
+                       f2fs_put_page(page, 1);
+               }
 
                nid += (NAT_ENTRY_PER_BLOCK - (nid % NAT_ENTRY_PER_BLOCK));
                if (unlikely(nid >= nm_i->max_nid))