|
@@ -517,7 +517,8 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|
|
if (err)
|
|
|
goto put_out_dir;
|
|
|
|
|
|
- if (update_dent_inode(old_inode, &new_dentry->d_name)) {
|
|
|
+ if (update_dent_inode(old_inode, new_inode,
|
|
|
+ &new_dentry->d_name)) {
|
|
|
release_orphan_inode(sbi);
|
|
|
goto put_out_dir;
|
|
|
}
|
|
@@ -557,6 +558,8 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|
|
|
|
|
down_write(&F2FS_I(old_inode)->i_sem);
|
|
|
file_lost_pino(old_inode);
|
|
|
+ if (new_inode && file_enc_name(new_inode))
|
|
|
+ file_set_enc_name(old_inode);
|
|
|
up_write(&F2FS_I(old_inode)->i_sem);
|
|
|
|
|
|
old_inode->i_ctime = CURRENT_TIME;
|
|
@@ -659,13 +662,17 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|
|
|
|
|
f2fs_lock_op(sbi);
|
|
|
|
|
|
- err = update_dent_inode(old_inode, &new_dentry->d_name);
|
|
|
+ err = update_dent_inode(old_inode, new_inode, &new_dentry->d_name);
|
|
|
if (err)
|
|
|
goto out_unlock;
|
|
|
+ if (file_enc_name(new_inode))
|
|
|
+ file_set_enc_name(old_inode);
|
|
|
|
|
|
- err = update_dent_inode(new_inode, &old_dentry->d_name);
|
|
|
+ err = update_dent_inode(new_inode, old_inode, &old_dentry->d_name);
|
|
|
if (err)
|
|
|
goto out_undo;
|
|
|
+ if (file_enc_name(old_inode))
|
|
|
+ file_set_enc_name(new_inode);
|
|
|
|
|
|
/* update ".." directory entry info of old dentry */
|
|
|
if (old_dir_entry)
|
|
@@ -723,8 +730,11 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|
|
f2fs_sync_fs(sbi->sb, 1);
|
|
|
return 0;
|
|
|
out_undo:
|
|
|
- /* Still we may fail to recover name info of f2fs_inode here */
|
|
|
- update_dent_inode(old_inode, &old_dentry->d_name);
|
|
|
+ /*
|
|
|
+ * Still we may fail to recover name info of f2fs_inode here
|
|
|
+ * Drop it, once its name is set as encrypted
|
|
|
+ */
|
|
|
+ update_dent_inode(old_inode, old_inode, &old_dentry->d_name);
|
|
|
out_unlock:
|
|
|
f2fs_unlock_op(sbi);
|
|
|
out_new_dir:
|