]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
f2fs: don't put new_page twice in f2fs_rename
authorJaegeuk Kim <jaegeuk@kernel.org>
Wed, 11 Dec 2019 23:10:47 +0000 (15:10 -0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Wed, 15 Jan 2020 21:43:49 +0000 (13:43 -0800)
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>
fs/f2fs/namei.c

index 5d9584281935fa9290906f3bef89fe705675ad2d..7a8a3df8406f14ad9cf098e08d44094d9049970f 100644 (file)
@@ -850,7 +850,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;
@@ -929,6 +929,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);
@@ -990,6 +991,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);
@@ -1025,8 +1027,7 @@ 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);
+       f2fs_put_page(new_page, 0);
 out_dir:
        if (old_dir_entry)
                f2fs_put_page(old_dir_page, 0);