Skip to content

Commit cce6c9f

Browse files
toshikanitytso
authored andcommitted
ext4, dax: set ext4_dax_aops for dax files
Sync syscall to DAX file needs to flush processor cache, but it currently does not flush to existing DAX files. This is because 'ext4_da_aops' is set to address_space_operations of existing DAX files, instead of 'ext4_dax_aops', since S_DAX flag is set after ext4_set_aops() in the open path. New file -------- lookup_open ext4_create __ext4_new_inode ext4_set_inode_flags // Set S_DAX flag ext4_set_aops // Set aops to ext4_dax_aops Existing file ------------- lookup_open ext4_lookup ext4_iget ext4_set_aops // Set aops to ext4_da_aops ext4_set_inode_flags // Set S_DAX flag Change ext4_iget() to initialize i_flags before ext4_set_aops(). Fixes: 5f0663b ("ext4, dax: introduce ext4_dax_aops") Signed-off-by: Toshi Kani <toshi.kani@hpe.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu> Suggested-by: Jan Kara <jack@suse.cz> Cc: stable@vger.kernel.org
1 parent 94dbb63 commit cce6c9f

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

fs/ext4/inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4896,6 +4896,7 @@ struct inode *ext4_iget(struct super_block *sb, unsigned long ino)
48964896
* not initialized on a new filesystem. */
48974897
}
48984898
ei->i_flags = le32_to_cpu(raw_inode->i_flags);
4899+
ext4_set_inode_flags(inode);
48994900
inode->i_blocks = ext4_inode_blocks(raw_inode, ei);
49004901
ei->i_file_acl = le32_to_cpu(raw_inode->i_file_acl_lo);
49014902
if (ext4_has_feature_64bit(sb))
@@ -5042,7 +5043,6 @@ struct inode *ext4_iget(struct super_block *sb, unsigned long ino)
50425043
goto bad_inode;
50435044
}
50445045
brelse(iloc.bh);
5045-
ext4_set_inode_flags(inode);
50465046

50475047
unlock_new_inode(inode);
50485048
return inode;

0 commit comments

Comments
 (0)