> +int dax_set_page_dirty(struct page *page) > +{ > + /* > + * Unlike __set_page_dirty_no_writeback that handles dirty page > + * tracking in the page object, dax does all dirty tracking in > + * the inode address_space in response to mkwrite faults. In the > + * dax case we only need to worry about potentially dirty CPU > + * caches, not dirty page cache pages to write back. > + * > + * This callback is defined to prevent fallback to > + * __set_page_dirty_buffers() in set_page_dirty(). > + */ > + return 0; > +} Make this a generic noop_set_page_dirty maybe? > +EXPORT_SYMBOL(dax_set_page_dirty); > + > +void dax_invalidatepage(struct page *page, unsigned int offset, > + unsigned int length) > +{ > + /* > + * There is no page cache to invalidate in the dax case, however > + * we need this callback defined to prevent falling back to > + * block_invalidatepage() in do_invalidatepage(). > + */ > +} Same here. > +EXPORT_SYMBOL(dax_invalidatepage); And EXPORT_SYMBOL_GPL for anything dax-related, please. > +const struct address_space_operations xfs_dax_aops = { > + .writepages = xfs_vm_writepages, Please split out the DAX case from xfs_vm_writepages. This patch should probably also split into VFS and XFS parts.