void move_node_page(struct page *node_page, int gc_type);
 int fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
                        struct writeback_control *wbc, bool atomic);
-int sync_node_pages(struct f2fs_sb_info *sbi, struct writeback_control *wbc);
+int sync_node_pages(struct f2fs_sb_info *sbi, struct writeback_control *wbc,
+                       bool do_balance);
 void build_free_nids(struct f2fs_sb_info *sbi, bool sync, bool mount);
 bool alloc_nid(struct f2fs_sb_info *sbi, nid_t *nid);
 void alloc_nid_done(struct f2fs_sb_info *sbi, nid_t nid);
 
 }
 
 static int __write_node_page(struct page *page, bool atomic, bool *submitted,
-                               struct writeback_control *wbc)
+                               struct writeback_control *wbc, bool do_balance)
 {
        struct f2fs_sb_info *sbi = F2FS_P_SB(page);
        nid_t nid;
        if (submitted)
                *submitted = fio.submitted;
 
+       if (do_balance)
+               f2fs_balance_fs(sbi, false);
        return 0;
 
 redirty_out:
 static int f2fs_write_node_page(struct page *page,
                                struct writeback_control *wbc)
 {
-       return __write_node_page(page, false, NULL, wbc);
+       return __write_node_page(page, false, NULL, wbc, false);
 }
 
 int fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
 
                        ret = __write_node_page(page, atomic &&
                                                page == last_page,
-                                               &submitted, wbc);
+                                               &submitted, wbc, true);
                        if (ret) {
                                unlock_page(page);
                                f2fs_put_page(last_page, 0);
        return ret ? -EIO: 0;
 }
 
-int sync_node_pages(struct f2fs_sb_info *sbi, struct writeback_control *wbc)
+int sync_node_pages(struct f2fs_sb_info *sbi, struct writeback_control *wbc,
+                                                       bool do_balance)
 {
        pgoff_t index, end;
        struct pagevec pvec;
                        set_fsync_mark(page, 0);
                        set_dentry_mark(page, 0);
 
-                       ret = __write_node_page(page, false, &submitted, wbc);
+                       ret = __write_node_page(page, false, &submitted,
+                                                       wbc, do_balance);
                        if (ret)
                                unlock_page(page);
                        else if (submitted)
        diff = nr_pages_to_write(sbi, NODE, wbc);
        wbc->sync_mode = WB_SYNC_NONE;
        blk_start_plug(&plug);
-       sync_node_pages(sbi, wbc);
+       sync_node_pages(sbi, wbc, true);
        blk_finish_plug(&plug);
        wbc->nr_to_write = max((long)0, wbc->nr_to_write - diff);
        return 0;