Merge branch 'linux-3.17' of git://anongit.freedesktop.org/git/nouveau/linux-2.6...
[cascardo/linux.git] / fs / f2fs / inode.c
index 2cf6962..2c39999 100644 (file)
@@ -267,13 +267,14 @@ int f2fs_write_inode(struct inode *inode, struct writeback_control *wbc)
 void f2fs_evict_inode(struct inode *inode)
 {
        struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb);
+       nid_t xnid = F2FS_I(inode)->i_xattr_nid;
 
        trace_f2fs_evict_inode(inode);
        truncate_inode_pages_final(&inode->i_data);
 
        if (inode->i_ino == F2FS_NODE_INO(sbi) ||
                        inode->i_ino == F2FS_META_INO(sbi))
-               goto no_delete;
+               goto out_clear;
 
        f2fs_bug_on(get_dirty_dents(inode));
        remove_dirty_dir_inode(inode);
@@ -295,6 +296,13 @@ void f2fs_evict_inode(struct inode *inode)
 
        sb_end_intwrite(inode->i_sb);
 no_delete:
-       clear_inode(inode);
        invalidate_mapping_pages(NODE_MAPPING(sbi), inode->i_ino, inode->i_ino);
+       if (xnid)
+               invalidate_mapping_pages(NODE_MAPPING(sbi), xnid, xnid);
+       if (is_inode_flag_set(F2FS_I(inode), FI_APPEND_WRITE))
+               add_dirty_inode(sbi, inode->i_ino, APPEND_INO);
+       if (is_inode_flag_set(F2FS_I(inode), FI_UPDATE_WRITE))
+               add_dirty_inode(sbi, inode->i_ino, UPDATE_INO);
+out_clear:
+       clear_inode(inode);
 }