f2fs: let's avoid to get cp_rwsem twice by f2fs_evict_inode by d_invalidate

Message ID 20221018005806.892778-1-jaegeuk@kernel.org
State New
Headers
Series f2fs: let's avoid to get cp_rwsem twice by f2fs_evict_inode by d_invalidate |

Commit Message

Jaegeuk Kim Oct. 18, 2022, 12:58 a.m. UTC
  f2fs_unlink
 -> f2fs_lock_op
 -> d_invalidate
  -> shrink_dentry_list
   -> iput_final
    -> f2fs_evict_inode
     -> f2fs_lock_op

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
---
 fs/f2fs/namei.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
  

Comments

Chao Yu Oct. 20, 2022, 1:13 a.m. UTC | #1
On 2022/10/18 8:58, Jaegeuk Kim wrote:
> f2fs_unlink
>   -> f2fs_lock_op
>   -> d_invalidate
>    -> shrink_dentry_list
>     -> iput_final
>      -> f2fs_evict_inode
>       -> f2fs_lock_op
> 
> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>

Reviewed-by: Chao Yu <chao@kernel.org>

Thanks,
  
李扬韬 Oct. 21, 2022, 6:38 p.m. UTC | #2
Tested-by: Yangtao Li <frank.li@vivo.com>

Thanks,
  

Patch

diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
index a389772fd212..e104409c3a0e 100644
--- a/fs/f2fs/namei.c
+++ b/fs/f2fs/namei.c
@@ -632,6 +632,8 @@  static int f2fs_unlink(struct inode *dir, struct dentry *dentry)
 		goto fail;
 	}
 	f2fs_delete_entry(de, page, dir, inode);
+	f2fs_unlock_op(sbi);
+
 #if IS_ENABLED(CONFIG_UNICODE)
 	/* VFS negative dentries are incompatible with Encoding and
 	 * Case-insensitiveness. Eventually we'll want avoid
@@ -642,8 +644,6 @@  static int f2fs_unlink(struct inode *dir, struct dentry *dentry)
 	if (IS_CASEFOLDED(dir))
 		d_invalidate(dentry);
 #endif
-	f2fs_unlock_op(sbi);
-
 	if (IS_DIRSYNC(dir))
 		f2fs_sync_fs(sbi->sb, 1);
 fail: