• Toshi Kani's avatar
    ext4, dax: set ext4_dax_aops for dax files · cce6c9f7
    Toshi Kani authored
    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: 5f0663bb ("ext4, dax: introduce ext4_dax_aops")
    Signed-off-by: default avatarToshi Kani <toshi.kani@hpe.com>
    Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    Suggested-by: default avatarJan Kara <jack@suse.cz>
    Cc: stable@vger.kernel.org
    cce6c9f7
inode.c 179 KB