summaryrefslogtreecommitdiffstats
path: root/fs/ext4/inode.c
diff options
context:
space:
mode:
authorRoss Zwisler <ross.zwisler@linux.intel.com>2017-10-12 11:54:08 -0400
committerTheodore Ts'o <tytso@mit.edu>2017-10-12 11:54:08 -0400
commite9072d859df3e0f2c3ba450f0d1739595c2d5d13 (patch)
tree8e91f9ce1bd1fdaf439d246e9d8045fd418a61d2 /fs/ext4/inode.c
parent559db4c6d784ceedc2a5418ced4d357cb843e221 (diff)
downloadlinux-e9072d859df3e0f2c3ba450f0d1739595c2d5d13.tar.bz2
ext4: prevent data corruption with journaling + DAX
The current code has the potential for data corruption when changing an inode's journaling mode, as that can result in a subsequent unsafe change in S_DAX. I've captured an instance of this data corruption in the following fstest: https://patchwork.kernel.org/patch/9948377/ Prevent this data corruption from happening by disallowing changes to the journaling mode if the '-o dax' mount option was used. This means that for a given filesystem we could have a mix of inodes using either DAX or data journaling, but whatever state the inodes are in will be held for the duration of the mount. Signed-off-by: Ross Zwisler <ross.zwisler@linux.intel.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu> Reviewed-by: Jan Kara <jack@suse.cz> Cc: stable@vger.kernel.org
Diffstat (limited to 'fs/ext4/inode.c')
-rw-r--r--fs/ext4/inode.c5
1 files changed, 0 insertions, 5 deletions
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index edfe95f81274..350e0910ed32 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -6004,11 +6004,6 @@ int ext4_change_inode_journal_flag(struct inode *inode, int val)
ext4_clear_inode_flag(inode, EXT4_INODE_JOURNAL_DATA);
}
ext4_set_aops(inode);
- /*
- * Update inode->i_flags after EXT4_INODE_JOURNAL_DATA was updated.
- * E.g. S_DAX may get cleared / set.
- */
- ext4_set_inode_flags(inode);
jbd2_journal_unlock_updates(journal);
percpu_up_write(&sbi->s_journal_flag_rwsem);