Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

f2fs: don't put new_page twice in f2fs_rename

In f2fs_rename(), new_page is gone after f2fs_set_link(), but it tries
to put again when whiteout is failed and jumped to put_out_dir.

Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>

+4 -3
+4 -3
fs/f2fs/namei.c
··· 850 850 struct inode *old_inode = d_inode(old_dentry); 851 851 struct inode *new_inode = d_inode(new_dentry); 852 852 struct inode *whiteout = NULL; 853 - struct page *old_dir_page; 853 + struct page *old_dir_page = NULL; 854 854 struct page *old_page, *new_page = NULL; 855 855 struct f2fs_dir_entry *old_dir_entry = NULL; 856 856 struct f2fs_dir_entry *old_entry; ··· 929 929 goto put_out_dir; 930 930 931 931 f2fs_set_link(new_dir, new_entry, new_page, old_inode); 932 + new_page = NULL; 932 933 933 934 new_inode->i_ctime = current_time(new_inode); 934 935 down_write(&F2FS_I(new_inode)->i_sem); ··· 991 990 f2fs_mark_inode_dirty_sync(old_inode, false); 992 991 993 992 f2fs_delete_entry(old_entry, old_page, old_dir, NULL); 993 + old_page = NULL; 994 994 995 995 if (whiteout) { 996 996 set_inode_flag(whiteout, FI_INC_LINK); ··· 1027 1025 1028 1026 put_out_dir: 1029 1027 f2fs_unlock_op(sbi); 1030 - if (new_page) 1031 - f2fs_put_page(new_page, 0); 1028 + f2fs_put_page(new_page, 0); 1032 1029 out_dir: 1033 1030 if (old_dir_entry) 1034 1031 f2fs_put_page(old_dir_page, 0);