]> git.itanic.dy.fi Git - linux-stable/commitdiff
ext4: make dioread_nolock the default
authorTheodore Ts'o <tytso@mit.edu>
Thu, 23 Jan 2020 17:23:17 +0000 (12:23 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Sat, 25 Jan 2020 02:23:12 +0000 (21:23 -0500)
This fixes the direct I/O versus writeback race which can reveal stale
data, and it improves the tail latency of commits on slow devices.

Link: https://lore.kernel.org/r/20200125022254.1101588-1-tytso@mit.edu
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/super.c

index ecf36a23e0c46af7846233ba7c5af283ec9ba832..c6fe742db798be1f217e1376662005be0998c593 100644 (file)
@@ -1592,6 +1592,7 @@ static const match_table_t tokens = {
        {Opt_auto_da_alloc, "auto_da_alloc"},
        {Opt_noauto_da_alloc, "noauto_da_alloc"},
        {Opt_dioread_nolock, "dioread_nolock"},
+       {Opt_dioread_lock, "nodioread_nolock"},
        {Opt_dioread_lock, "dioread_lock"},
        {Opt_discard, "discard"},
        {Opt_nodiscard, "nodiscard"},
@@ -3764,6 +3765,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
                set_opt(sb, NO_UID32);
        /* xattr user namespace & acls are now defaulted on */
        set_opt(sb, XATTR_USER);
+       set_opt(sb, DIOREAD_NOLOCK);
 #ifdef CONFIG_EXT4_FS_POSIX_ACL
        set_opt(sb, POSIX_ACL);
 #endif
@@ -3931,9 +3933,8 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
 #endif
 
        if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) {
-               printk_once(KERN_WARNING "EXT4-fs: Warning: mounting "
-                           "with data=journal disables delayed "
-                           "allocation and O_DIRECT support!\n");
+               printk_once(KERN_WARNING "EXT4-fs: Warning: mounting with data=journal disables delayed allocation, dioread_nolock, and O_DIRECT support!\n");
+               clear_opt(sb, DIOREAD_NOLOCK);
                if (test_opt2(sb, EXPLICIT_DELALLOC)) {
                        ext4_msg(sb, KERN_ERR, "can't mount with "
                                 "both data=journal and delalloc");