• Dan Williams's avatar
    xfs, dax: introduce xfs_dax_aops · 6e2608df
    Dan Williams authored
    In preparation for the dax implementation to start associating dax pages
    to inodes via page->mapping, we need to provide a 'struct
    address_space_operations' instance for dax. Otherwise, direct-I/O
    triggers incorrect page cache assumptions and warnings like the
    following:
    
     WARNING: CPU: 27 PID: 1783 at fs/xfs/xfs_aops.c:1468
     xfs_vm_set_page_dirty+0xf3/0x1b0 [xfs]
     [..]
     CPU: 27 PID: 1783 Comm: dma-collision Tainted: G           O 4.15.0-rc2+ #984
     [..]
     Call Trace:
      set_page_dirty_lock+0x40/0x60
      bio_set_pages_dirty+0x37/0x50
      iomap_dio_actor+0x2b7/0x3b0
      ? iomap_dio_zero+0x110/0x110
      iomap_apply+0xa4/0x110
      iomap_dio_rw+0x29e/0x3b0
      ? iomap_dio_zero+0x110/0x110
      ? xfs_file_dio_aio_read+0x7c/0x1a0 [xfs]
      xfs_file_dio_aio_read+0x7c/0x1a0 [xfs]
      xfs_file_read_iter+0xa0/0xc0 [xfs]
      __vfs_read+0xf9/0x170
      vfs_read+0xa6/0x150
      SyS_pread64+0x93/0xb0
      entry_SYSCALL_64_fastpath+0x1f/0x96
    
    ...where the default set_page_dirty() handler assumes that dirty state
    is being tracked in 'struct page' flags.
    
    Cc: Jeff Moyer <jmoyer@redhat.com>
    Cc: Matthew Wilcox <mawilcox@microsoft.com>
    Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
    Suggested-by: default avatarJan Kara <jack@suse.cz>
    Suggested-by: default avatarDave Chinner <david@fromorbit.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarJan Kara <jack@suse.cz>
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    6e2608df
xfs_aops.h 2.27 KB