]> git.baikalelectronics.ru Git - kernel.git/commit
ext4, dax: set ext4_dax_aops for dax files
authorToshi Kani <toshi.kani@hpe.com>
Sun, 16 Sep 2018 01:37:59 +0000 (21:37 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Sun, 16 Sep 2018 01:37:59 +0000 (21:37 -0400)
commitc9086b60e4beba321523d6588befd101e665dad8
tree458d780a12b482f679743feeecb648cb52a07fb6
parent972d94e66258dca37b6499b08112b7a1378a3e09
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: cb1ff896036b ("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
fs/ext4/inode.c