|
@@ -4368,7 +4368,9 @@ void ext4_set_inode_flags(struct inode *inode)
|
|
|
new_fl |= S_NOATIME;
|
|
|
if (flags & EXT4_DIRSYNC_FL)
|
|
|
new_fl |= S_DIRSYNC;
|
|
|
- if (test_opt(inode->i_sb, DAX) && S_ISREG(inode->i_mode))
|
|
|
+ if (test_opt(inode->i_sb, DAX) && S_ISREG(inode->i_mode) &&
|
|
|
+ !ext4_should_journal_data(inode) && !ext4_has_inline_data(inode) &&
|
|
|
+ !ext4_encrypted_inode(inode))
|
|
|
new_fl |= S_DAX;
|
|
|
inode_set_flags(inode, new_fl,
|
|
|
S_SYNC|S_APPEND|S_IMMUTABLE|S_NOATIME|S_DIRSYNC|S_DAX);
|
|
@@ -5641,6 +5643,11 @@ 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);
|