ext4: Move marking of handle as sync to ext4_add_nondir()
authorJan Kara <jack@suse.cz>
Tue, 5 Nov 2019 16:44:10 +0000 (17:44 +0100)
committerTheodore Ts'o <tytso@mit.edu>
Tue, 5 Nov 2019 17:13:25 +0000 (12:13 -0500)
Every caller of ext4_add_nondir() marks handle as sync if directory has
DIRSYNC set. Move this marking to ext4_add_nondir() so reduce some
duplication.

Signed-off-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20191105164437.32602-4-jack@suse.cz
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/namei.c

index a427d2031a8dacb1f4a0379da72c85d3bfbd746a..97cf1c8b56b2b8b5479a97c018cd2f46f0c85f61 100644 (file)
@@ -2550,9 +2550,12 @@ static void ext4_dec_count(handle_t *handle, struct inode *inode)
 static int ext4_add_nondir(handle_t *handle,
                struct dentry *dentry, struct inode *inode)
 {
+       struct inode *dir = d_inode(dentry->d_parent);
        int err = ext4_add_entry(handle, dentry, inode);
        if (!err) {
                ext4_mark_inode_dirty(handle, inode);
+               if (IS_DIRSYNC(dir))
+                       ext4_handle_sync(handle);
                d_instantiate_new(dentry, inode);
                return 0;
        }
@@ -2593,8 +2596,6 @@ retry:
                inode->i_fop = &ext4_file_operations;
                ext4_set_aops(inode);
                err = ext4_add_nondir(handle, dentry, inode);
-               if (!err && IS_DIRSYNC(dir))
-                       ext4_handle_sync(handle);
        }
        if (handle)
                ext4_journal_stop(handle);
@@ -2625,8 +2626,6 @@ retry:
                init_special_inode(inode, inode->i_mode, rdev);
                inode->i_op = &ext4_special_inode_operations;
                err = ext4_add_nondir(handle, dentry, inode);
-               if (!err && IS_DIRSYNC(dir))
-                       ext4_handle_sync(handle);
        }
        if (handle)
                ext4_journal_stop(handle);
@@ -3329,9 +3328,6 @@ static int ext4_symlink(struct inode *dir,
        }
        EXT4_I(inode)->i_disksize = inode->i_size;
        err = ext4_add_nondir(handle, dentry, inode);
-       if (!err && IS_DIRSYNC(dir))
-               ext4_handle_sync(handle);
-
        if (handle)
                ext4_journal_stop(handle);
        goto out_free_encrypted_link;