f2fs: cleanup the disk level filename updating
authorKinglong Mee <kinglongmee@gmail.com>
Fri, 10 Mar 2017 08:28:46 +0000 (16:28 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Wed, 22 Mar 2017 02:34:33 +0000 (22:34 -0400)
As discuss with Jaegeuk and Chao,
"Once checkpoint is done, f2fs doesn't need to update there-in filename at all."

The disk-level filename is used only one case,
1. create a file A under a dir
2. sync A
3. godown
4. umount
5. mount (roll_forward)

Only the rename/cross_rename changes the filename, if it happens,
a. between step 1 and 2, the sync A will caused checkpoint, so that,
   the roll_forward at step 5 never happens.
b. after step 2, the roll_forward happens, file A will roll forward
   to the result as after step 1.

So that, any updating the disk filename is useless, just cleanup it.

Signed-off-by: Kinglong Mee <kinglongmee@gmail.com>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/dir.c
fs/f2fs/f2fs.h
fs/f2fs/file.c
fs/f2fs/inline.c
fs/f2fs/namei.c

index 8d5c62b07b283f53e90ded2366c8bb9375409fa2..058c4f3afcef9e1a2735257f03ca83d2d5df4538 100644 (file)
@@ -337,24 +337,6 @@ static void init_dent_inode(const struct qstr *name, struct page *ipage)
        set_page_dirty(ipage);
 }
 
-int update_dent_inode(struct inode *inode, struct inode *to,
-                                       const struct qstr *name)
-{
-       struct page *page;
-
-       if (file_enc_name(to))
-               return 0;
-
-       page = get_node_page(F2FS_I_SB(inode), inode->i_ino);
-       if (IS_ERR(page))
-               return PTR_ERR(page);
-
-       init_dent_inode(name, page);
-       f2fs_put_page(page, 1);
-
-       return 0;
-}
-
 void do_make_empty_dir(struct inode *inode, struct inode *parent,
                                        struct f2fs_dentry_ptr *d)
 {
@@ -438,8 +420,11 @@ struct page *init_inode_metadata(struct inode *inode, struct inode *dir,
                set_cold_node(inode, page);
        }
 
-       if (new_name)
+       if (new_name) {
                init_dent_inode(new_name, page);
+               if (f2fs_encrypted_inode(dir))
+                       file_set_enc_name(inode);
+       }
 
        /*
         * This file should be checkpointed during fsync.
@@ -599,8 +584,6 @@ add_dentry:
                        err = PTR_ERR(page);
                        goto fail;
                }
-               if (f2fs_encrypted_inode(dir))
-                       file_set_enc_name(inode);
        }
 
        make_dentry_ptr(NULL, &d, (void *)dentry_blk, 1);
index 6c00a787c342ac0142e3e99f5046b848837fada1..a481c8e39b7cb614dd85ec8243195438497ede48 100644 (file)
@@ -2087,8 +2087,6 @@ ino_t f2fs_inode_by_name(struct inode *dir, const struct qstr *qstr,
                        struct page **page);
 void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de,
                        struct page *page, struct inode *inode);
-int update_dent_inode(struct inode *inode, struct inode *to,
-                       const struct qstr *name);
 void f2fs_update_dentry(nid_t ino, umode_t mode, struct f2fs_dentry_ptr *d,
                        const struct qstr *name, f2fs_hash_t name_hash,
                        unsigned int bit_pos);
index 77ebd6b9323c4823673759d6c11b3800b0be538d..78ece6e4779c6f352587ac610244639ed9f5cadc 100644 (file)
@@ -110,20 +110,12 @@ static int get_parent_ino(struct inode *inode, nid_t *pino)
 {
        struct dentry *dentry;
 
-       if (file_enc_name(inode))
-               return 0;
-
        inode = igrab(inode);
        dentry = d_find_any_alias(inode);
        iput(inode);
        if (!dentry)
                return 0;
 
-       if (update_dent_inode(inode, inode, &dentry->d_name)) {
-               dput(dentry);
-               return 0;
-       }
-
        *pino = parent_ino(dentry);
        dput(dentry);
        return 1;
index 93c15337bcd9d7ae1361410d310f9280ef93c8f7..701bbd8d10ba918d19d91e0b8064db93a4a28a51 100644 (file)
@@ -528,8 +528,6 @@ int f2fs_add_inline_entry(struct inode *dir, const struct qstr *new_name,
                        err = PTR_ERR(page);
                        goto fail;
                }
-               if (f2fs_encrypted_inode(dir))
-                       file_set_enc_name(inode);
        }
 
        f2fs_wait_on_page_writeback(ipage, NODE, true);
index 25c073f6c7d49d5600a04c219076e45b191054ae..8906c9f6cce41e5ff6e37d3d60adf55fa02ca827 100644 (file)
@@ -720,13 +720,6 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,
                if (err)
                        goto put_out_dir;
 
-               err = update_dent_inode(old_inode, new_inode,
-                                               &new_dentry->d_name);
-               if (err) {
-                       release_orphan_inode(sbi);
-                       goto put_out_dir;
-               }
-
                f2fs_set_link(new_dir, new_entry, new_page, old_inode);
 
                new_inode->i_ctime = current_time(new_inode);
@@ -779,8 +772,6 @@ 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(old_inode);
@@ -917,18 +908,6 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
 
        f2fs_lock_op(sbi);
 
-       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_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)
                f2fs_set_link(old_inode, old_dir_entry, old_dir_page, new_dir);
@@ -972,14 +951,6 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
        if (IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir))
                f2fs_sync_fs(sbi->sb, 1);
        return 0;
-out_undo:
-       /*
-        * 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:
        if (new_dir_entry) {
                f2fs_dentry_kunmap(new_inode, new_dir_page);