got_it:
        if (new_i_size && i_size_read(inode) <
                                ((loff_t)(index + 1) << PAGE_SHIFT)) {
-               i_size_write(inode, ((loff_t)(index + 1) << PAGE_SHIFT));
+               f2fs_i_size_write(inode, ((loff_t)(index + 1) << PAGE_SHIFT));
                /* Only the directory inode sets new_i_size */
                set_inode_flag(inode, FI_UPDATE_DIR);
        }
        fofs = start_bidx_of_node(ofs_of_node(dn->node_page), dn->inode) +
                                                        dn->ofs_in_node;
        if (i_size_read(dn->inode) < ((loff_t)(fofs + 1) << PAGE_SHIFT))
-               i_size_write(dn->inode,
+               f2fs_i_size_write(dn->inode,
                                ((loff_t)(fofs + 1) << PAGE_SHIFT));
        return 0;
 }
 
        set_page_dirty(page);
 
-       if (pos + copied > i_size_read(inode)) {
-               i_size_write(inode, pos + copied);
-               mark_inode_dirty(inode);
-       }
+       if (pos + copied > i_size_read(inode))
+               f2fs_i_size_write(inode, pos + copied);
 
        f2fs_put_page(page, 1);
        f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
 
        drop_nlink(inode);
        if (S_ISDIR(inode->i_mode)) {
                drop_nlink(inode);
-               i_size_write(inode, 0);
+               f2fs_i_size_write(inode, 0);
        }
        up_write(&F2FS_I(inode)->i_sem);
        update_inode_page(inode);
 
        set_inode_flag(inode, FI_ACL_MODE);
 }
 
+static inline void f2fs_i_size_write(struct inode *inode, loff_t i_size)
+{
+       if (i_size_read(inode) == i_size)
+               return;
+
+       i_size_write(inode, i_size);
+       mark_inode_dirty_sync(inode);
+}
+
 static inline void get_inline_info(struct inode *inode, struct f2fs_inode *ri)
 {
        if (ri->i_inline & F2FS_INLINE_XATTR)
 
 
        ret = truncate_blocks(inode, new_size, true);
        if (!ret)
-               i_size_write(inode, new_size);
+               f2fs_i_size_write(inode, new_size);
 
        return ret;
 }
 
 out:
        if (!(mode & FALLOC_FL_KEEP_SIZE) && i_size_read(inode) < new_size) {
-               i_size_write(inode, new_size);
-               mark_inode_dirty(inode);
+               f2fs_i_size_write(inode, new_size);
                update_inode_page(inode);
        }
 
        truncate_pagecache(inode, offset);
 
        if (!ret)
-               i_size_write(inode, new_size);
+               f2fs_i_size_write(inode, new_size);
        return ret;
 }
 
        }
 
        if (!(mode & FALLOC_FL_KEEP_SIZE) && i_size_read(inode) < new_size) {
-               i_size_write(inode, new_size);
-               mark_inode_dirty(inode);
+               f2fs_i_size_write(inode, new_size);
                update_inode_page(inode);
        }
 
 
 
        /* update i_size to MAX_INLINE_DATA */
        if (i_size_read(inode) < MAX_INLINE_DATA) {
-               i_size_write(inode, MAX_INLINE_DATA);
+               f2fs_i_size_write(inode, MAX_INLINE_DATA);
                set_inode_flag(inode, FI_UPDATE_DIR);
        }
        return 0;
 
        F2FS_I(dir)->i_current_depth = 1;
        if (i_size_read(dir) < PAGE_SIZE) {
-               i_size_write(dir, PAGE_SIZE);
+               f2fs_i_size_write(dir, PAGE_SIZE);
                set_inode_flag(dir, FI_UPDATE_DIR);
        }
 
        lock_page(ipage);
        memcpy(inline_dentry, backup_dentry, MAX_INLINE_DATA);
        F2FS_I(dir)->i_current_depth = 0;
-       i_size_write(dir, MAX_INLINE_DATA);
+       f2fs_i_size_write(dir, MAX_INLINE_DATA);
        update_inode(dir, ipage);
        f2fs_put_page(ipage, 1);
 
 
        char *name;
 
        inode->i_mode = le16_to_cpu(raw->i_mode);
-       i_size_write(inode, le64_to_cpu(raw->i_size));
+       f2fs_i_size_write(inode, le64_to_cpu(raw->i_size));
        inode->i_atime.tv_sec = le64_to_cpu(raw->i_mtime);
        inode->i_ctime.tv_sec = le64_to_cpu(raw->i_ctime);
        inode->i_mtime.tv_sec = le64_to_cpu(raw->i_mtime);
 
                        f2fs_destroy_extent_node(inode);
 
                        sb_start_intwrite(inode->i_sb);
-                       i_size_write(inode, 0);
+                       f2fs_i_size_write(inode, 0);
 
                        if (F2FS_HAS_BLOCKS(inode))
                                f2fs_truncate(inode, true);