f2fs crypto: add filename encryption for roll-forward recovery
[deliverable/linux.git] / fs / f2fs / namei.c
index bc8992e8137e7c6b688655546257aa13289fe078..c857f8249da0901d2f682ca9bd3d6049d5735e89 100644 (file)
@@ -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:
This page took 0.024678 seconds and 5 git commands to generate.