f2fs: don't change inode status under page lock
authorChao Yu <yuchao0@huawei.com>
Fri, 20 Mar 2020 10:17:54 +0000 (18:17 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Tue, 31 Mar 2020 03:46:23 +0000 (20:46 -0700)
In order to shrink page lock coverage.

Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/dir.c

index 27d0dd7a16d6dbbbb59e33f8fd7a032a470b0ba0..0971ccc4664a13f30819f12c9d2810c6374b71f5 100644 (file)
@@ -850,12 +850,6 @@ void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page,
                        0);
        set_page_dirty(page);
 
-       dir->i_ctime = dir->i_mtime = current_time(dir);
-       f2fs_mark_inode_dirty_sync(dir, false);
-
-       if (inode)
-               f2fs_drop_nlink(dir, inode);
-
        if (bit_pos == NR_DENTRY_IN_BLOCK &&
                !f2fs_truncate_hole(dir, page->index, page->index + 1)) {
                f2fs_clear_page_cache_dirty_tag(page);
@@ -867,6 +861,12 @@ void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page,
                f2fs_remove_dirty_inode(dir);
        }
        f2fs_put_page(page, 1);
+
+       dir->i_ctime = dir->i_mtime = current_time(dir);
+       f2fs_mark_inode_dirty_sync(dir, false);
+
+       if (inode)
+               f2fs_drop_nlink(dir, inode);
 }
 
 bool f2fs_empty_dir(struct inode *dir)