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 <kinglong...@gmail.com>
---
 fs/f2fs/dir.c    | 25 ++++---------------------
 fs/f2fs/f2fs.h   |  2 --
 fs/f2fs/file.c   |  8 --------
 fs/f2fs/inline.c |  2 --
 fs/f2fs/namei.c  | 29 -----------------------------
 5 files changed, 4 insertions(+), 62 deletions(-)

diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 8d5c62b..058c4f3 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -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 @@ int f2fs_add_regular_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);
        }
 
        make_dentry_ptr(NULL, &d, (void *)dentry_blk, 1);
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 7edb3be..5dbc0c0 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -2093,8 +2093,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);
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 4ec764e..8c7923f 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -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;
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index e32a9e5..41fe27d 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -527,8 +527,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);
diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
index 25c073f..8906c9f 100644
--- a/fs/f2fs/namei.c
+++ b/fs/f2fs/namei.c
@@ -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);
-- 
2.9.3


------------------------------------------------------------------------------
Announcing the Oxford Dictionaries API! The API offers world-renowned
dictionary content that is easy and intuitive to access. Sign up for an
account today to start using our lexical data to power your apps and
projects. Get started today and enter our developer competition.
http://sdm.link/oxford
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to