From 44c16156512f33c81e382a1e1df9524e26a7026a Mon Sep 17 00:00:00 2001 From: Jaegeuk Kim Date: Thu, 25 Sep 2014 11:55:53 -0700 Subject: f2fs: call f2fs_unlock_op after error was handled This patch relocates f2fs_unlock_op in every directory operations to be called after any error was processed. Otherwise, the checkpoint can be entered with valid node ids without its dentry when -ENOSPC is occurred. Signed-off-by: Jaegeuk Kim --- fs/f2fs/inode.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'fs/f2fs/inode.c') diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c index ff95547..63923ee 100644 --- a/fs/f2fs/inode.c +++ b/fs/f2fs/inode.c @@ -306,3 +306,26 @@ no_delete: out_clear: clear_inode(inode); } + +/* caller should call f2fs_lock_op() */ +void handle_failed_inode(struct inode *inode) +{ + struct f2fs_sb_info *sbi = F2FS_I_SB(inode); + + clear_nlink(inode); + make_bad_inode(inode); + unlock_new_inode(inode); + + i_size_write(inode, 0); + if (F2FS_HAS_BLOCKS(inode)) + f2fs_truncate(inode); + + remove_inode_page(inode); + stat_dec_inline_inode(inode); + + alloc_nid_failed(sbi, inode->i_ino); + f2fs_unlock_op(sbi); + + /* iput will drop the inode object */ + iput(inode); +} -- cgit v1.1