summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorToshi Kani <toshi.kani@hpe.com>2018-09-15 21:37:59 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-09-29 02:56:02 -0700
commitec215095ac28e564e1eddf333fd85394b6908be4 (patch)
tree45d07ccf82208f0666eafe8511bf39485773cf89 /fs
parente2dd3371bfd1bb30163d0cac205aa212be4bdf36 (diff)
downloadlinux-stable-ec215095ac28e564e1eddf333fd85394b6908be4.tar.gz
linux-stable-ec215095ac28e564e1eddf333fd85394b6908be4.tar.bz2
linux-stable-ec215095ac28e564e1eddf333fd85394b6908be4.zip
ext4, dax: set ext4_dax_aops for dax files
commit cce6c9f7e6029caee45c459db5b3e78fec6973cb upstream. 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: 5f0663bb4a64 ("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 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'fs')
-rw-r--r--fs/ext4/inode.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 6042c019ea54..2276137d0083 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -4861,6 +4861,7 @@ struct inode *ext4_iget(struct super_block *sb, unsigned long ino)
* not initialized on a new filesystem. */
}
ei->i_flags = le32_to_cpu(raw_inode->i_flags);
+ ext4_set_inode_flags(inode);
inode->i_blocks = ext4_inode_blocks(raw_inode, ei);
ei->i_file_acl = le32_to_cpu(raw_inode->i_file_acl_lo);
if (ext4_has_feature_64bit(sb))
@@ -5010,7 +5011,6 @@ struct inode *ext4_iget(struct super_block *sb, unsigned long ino)
goto bad_inode;
}
brelse(iloc.bh);
- ext4_set_inode_flags(inode);
unlock_new_inode(inode);
return inode;