Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a0687192 authored by Jaegeuk Kim's avatar Jaegeuk Kim Committed by Jaegeuk Kim
Browse files

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: default avatarChao Yu <yuchao0@huawei.com>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
parent c643e2b9
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -854,7 +854,7 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,
	struct inode *old_inode = d_inode(old_dentry);
	struct inode *new_inode = d_inode(new_dentry);
	struct inode *whiteout = NULL;
	struct page *old_dir_page;
	struct page *old_dir_page = NULL;
	struct page *old_page, *new_page = NULL;
	struct f2fs_dir_entry *old_dir_entry = NULL;
	struct f2fs_dir_entry *old_entry;
@@ -933,6 +933,7 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,
			goto put_out_dir;

		f2fs_set_link(new_dir, new_entry, new_page, old_inode);
		new_page = NULL;

		new_inode->i_ctime = current_time(new_inode);
		down_write(&F2FS_I(new_inode)->i_sem);
@@ -994,6 +995,7 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,
	f2fs_mark_inode_dirty_sync(old_inode, false);

	f2fs_delete_entry(old_entry, old_page, old_dir, NULL);
	old_page = NULL;

	if (whiteout) {
		set_inode_flag(whiteout, FI_INC_LINK);
@@ -1029,7 +1031,6 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,

put_out_dir:
	f2fs_unlock_op(sbi);
	if (new_page)
	f2fs_put_page(new_page, 0);
out_dir:
	if (old_dir_entry)