f2fs: avoid reading NAT page by get_node_info
authorJaegeuk Kim <jaegeuk@kernel.org>
Tue, 14 Feb 2017 01:02:44 +0000 (17:02 -0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Thu, 23 Feb 2017 18:21:47 +0000 (10:21 -0800)
We've not seen this buggy case for a long time, so it's time to avoid this
unnecessary get_node_info() call which reading NAT page to cache nat entry.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/node.c

index f8fb25a27b464692be4a49993c0f950e260a775a..8ebc4c78e6a4882b95304eaecaf433af56e431fb 100644 (file)
@@ -1028,7 +1028,7 @@ struct page *new_node_page(struct dnode_of_data *dn,
                                unsigned int ofs, struct page *ipage)
 {
        struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
-       struct node_info old_ni, new_ni;
+       struct node_info new_ni;
        struct page *page;
        int err;
 
@@ -1043,13 +1043,15 @@ struct page *new_node_page(struct dnode_of_data *dn,
                err = -ENOSPC;
                goto fail;
        }
-
-       get_node_info(sbi, dn->nid, &old_ni);
-
-       /* Reinitialize old_ni with new node page */
-       f2fs_bug_on(sbi, old_ni.blk_addr != NULL_ADDR);
-       new_ni = old_ni;
+#ifdef CONFIG_F2FS_CHECK_FS
+       get_node_info(sbi, dn->nid, &new_ni);
+       f2fs_bug_on(sbi, new_ni.blk_addr != NULL_ADDR);
+#endif
+       new_ni.nid = dn->nid;
        new_ni.ino = dn->inode->i_ino;
+       new_ni.blk_addr = NULL_ADDR;
+       new_ni.flag = 0;
+       new_ni.version = 0;
        set_node_addr(sbi, &new_ni, NEW_ADDR, false);
 
        f2fs_wait_on_page_writeback(page, NODE, true);