f2fs: clean up f2fs_balance_fs
[linux-2.6-block.git] / fs / f2fs / inode.c
index 97e20decacb4e17677fc3c43cfb5d45a6ab290bc..2ac4b780e8b43d8be07ed969525aa6f62e9de9c5 100644 (file)
@@ -138,7 +138,8 @@ static int do_read_inode(struct inode *inode)
        fi->i_pino = le32_to_cpu(ri->i_pino);
        fi->i_dir_level = ri->i_dir_level;
 
-       f2fs_init_extent_tree(inode, &ri->i_ext);
+       if (f2fs_init_extent_tree(inode, &ri->i_ext))
+               set_page_dirty(node_page);
 
        get_inline_info(fi, ri);
 
@@ -221,7 +222,7 @@ bad_inode:
        return ERR_PTR(ret);
 }
 
-void update_inode(struct inode *inode, struct page *node_page)
+int update_inode(struct inode *inode, struct page *node_page)
 {
        struct f2fs_inode *ri;
 
@@ -259,15 +260,16 @@ void update_inode(struct inode *inode, struct page *node_page)
 
        __set_inode_rdev(inode, ri);
        set_cold_node(inode, node_page);
-       set_page_dirty(node_page);
-
        clear_inode_flag(F2FS_I(inode), FI_DIRTY_INODE);
+
+       return set_page_dirty(node_page);
 }
 
-void update_inode_page(struct inode *inode)
+int update_inode_page(struct inode *inode)
 {
        struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
        struct page *node_page;
+       int ret = 0;
 retry:
        node_page = get_node_page(sbi, inode->i_ino);
        if (IS_ERR(node_page)) {
@@ -278,10 +280,11 @@ retry:
                } else if (err != -ENOENT) {
                        f2fs_stop_checkpoint(sbi);
                }
-               return;
+               return 0;
        }
-       update_inode(inode, node_page);
+       ret = update_inode(inode, node_page);
        f2fs_put_page(node_page, 1);
+       return ret;
 }
 
 int f2fs_write_inode(struct inode *inode, struct writeback_control *wbc)
@@ -299,9 +302,8 @@ int f2fs_write_inode(struct inode *inode, struct writeback_control *wbc)
         * We need to balance fs here to prevent from producing dirty node pages
         * during the urgent cleaning time when runing out of free sections.
         */
-       update_inode_page(inode);
-
-       f2fs_balance_fs(sbi);
+       if (update_inode_page(inode))
+               f2fs_balance_fs(sbi, true);
        return 0;
 }
 
@@ -327,7 +329,7 @@ void f2fs_evict_inode(struct inode *inode)
                goto out_clear;
 
        f2fs_bug_on(sbi, get_dirty_pages(inode));
-       remove_dirty_dir_inode(inode);
+       remove_dirty_inode(inode);
 
        f2fs_destroy_extent_tree(inode);
 
@@ -357,9 +359,9 @@ no_delete:
        if (xnid)
                invalidate_mapping_pages(NODE_MAPPING(sbi), xnid, xnid);
        if (is_inode_flag_set(fi, FI_APPEND_WRITE))
-               add_dirty_inode(sbi, inode->i_ino, APPEND_INO);
+               add_ino_entry(sbi, inode->i_ino, APPEND_INO);
        if (is_inode_flag_set(fi, FI_UPDATE_WRITE))
-               add_dirty_inode(sbi, inode->i_ino, UPDATE_INO);
+               add_ino_entry(sbi, inode->i_ino, UPDATE_INO);
        if (is_inode_flag_set(fi, FI_FREE_NID)) {
                if (err && err != -ENOENT)
                        alloc_nid_done(sbi, inode->i_ino);