flush_out:
        remove_ino_entry(sbi, ino, UPDATE_INO);
        clear_inode_flag(inode, FI_UPDATE_WRITE);
-       ret = f2fs_issue_flush(sbi);
+       if (!atomic)
+               ret = f2fs_issue_flush(sbi);
        f2fs_update_time(sbi, REQ_TIME);
 out:
        trace_f2fs_sync_file_exit(inode, need_cp, datasync, ret);
 
        return last_page;
 }
 
-static int __write_node_page(struct page *page,
+static int __write_node_page(struct page *page, bool atomic,
                                struct writeback_control *wbc)
 {
        struct f2fs_sb_info *sbi = F2FS_P_SB(page);
                return 0;
        }
 
+       if (atomic && !test_opt(sbi, NOBARRIER))
+               fio.op_flags |= REQ_PREFLUSH | REQ_FUA;
+
        set_page_writeback(page);
        fio.old_blkaddr = ni.blk_addr;
        write_node_page(nid, &fio);
 static int f2fs_write_node_page(struct page *page,
                                struct writeback_control *wbc)
 {
-       return __write_node_page(page, wbc);
+       return __write_node_page(page, false, wbc);
 }
 
 int fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
                        if (!clear_page_dirty_for_io(page))
                                goto continue_unlock;
 
-                       ret = __write_node_page(page, wbc);
+                       ret = __write_node_page(page, atomic &&
+                                               page == last_page, wbc);
                        if (ret) {
                                unlock_page(page);
                                f2fs_put_page(last_page, 0);
 
                { REQ_SYNC | REQ_PRIO,  "(SP)" },                       \
                { REQ_META,             "(M)" },                        \
                { REQ_META | REQ_PRIO,  "(MP)" },                       \
+               { REQ_SYNC | REQ_PREFLUSH , "(SF)" },                   \
                { REQ_SYNC | REQ_META | REQ_PRIO, "(SMP)" },            \
                { REQ_PREFLUSH | REQ_META | REQ_PRIO, "(FMP)" },        \
                { 0, " \b" })