diff options
Diffstat (limited to 'fs/f2fs/inode.c')
| -rw-r--r-- | fs/f2fs/inode.c | 12 | 
1 files changed, 10 insertions, 2 deletions
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c index 2cf6962f6cc8..2c39999f3868 100644 --- a/fs/f2fs/inode.c +++ b/fs/f2fs/inode.c @@ -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);  }  |