|
@@ -1194,16 +1194,22 @@ xfs_vm_writepages(
|
|
|
int ret;
|
|
|
|
|
|
xfs_iflags_clear(XFS_I(mapping->host), XFS_ITRUNCATED);
|
|
|
- if (dax_mapping(mapping))
|
|
|
- return dax_writeback_mapping_range(mapping,
|
|
|
- xfs_find_bdev_for_inode(mapping->host), wbc);
|
|
|
-
|
|
|
ret = write_cache_pages(mapping, wbc, xfs_do_writepage, &wpc);
|
|
|
if (wpc.ioend)
|
|
|
ret = xfs_submit_ioend(wbc, wpc.ioend, ret);
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+STATIC int
|
|
|
+xfs_dax_writepages(
|
|
|
+ struct address_space *mapping,
|
|
|
+ struct writeback_control *wbc)
|
|
|
+{
|
|
|
+ xfs_iflags_clear(XFS_I(mapping->host), XFS_ITRUNCATED);
|
|
|
+ return dax_writeback_mapping_range(mapping,
|
|
|
+ xfs_find_bdev_for_inode(mapping->host), wbc);
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* Called to move a page into cleanable state - and from there
|
|
|
* to be released. The page should already be clean. We always
|
|
@@ -1367,17 +1373,6 @@ out_unlock:
|
|
|
return error;
|
|
|
}
|
|
|
|
|
|
-STATIC ssize_t
|
|
|
-xfs_vm_direct_IO(
|
|
|
- struct kiocb *iocb,
|
|
|
- struct iov_iter *iter)
|
|
|
-{
|
|
|
- /*
|
|
|
- * We just need the method present so that open/fcntl allow direct I/O.
|
|
|
- */
|
|
|
- return -EINVAL;
|
|
|
-}
|
|
|
-
|
|
|
STATIC sector_t
|
|
|
xfs_vm_bmap(
|
|
|
struct address_space *mapping,
|
|
@@ -1500,8 +1495,15 @@ const struct address_space_operations xfs_address_space_operations = {
|
|
|
.releasepage = xfs_vm_releasepage,
|
|
|
.invalidatepage = xfs_vm_invalidatepage,
|
|
|
.bmap = xfs_vm_bmap,
|
|
|
- .direct_IO = xfs_vm_direct_IO,
|
|
|
+ .direct_IO = noop_direct_IO,
|
|
|
.migratepage = buffer_migrate_page,
|
|
|
.is_partially_uptodate = block_is_partially_uptodate,
|
|
|
.error_remove_page = generic_error_remove_page,
|
|
|
};
|
|
|
+
|
|
|
+const struct address_space_operations xfs_dax_aops = {
|
|
|
+ .writepages = xfs_dax_writepages,
|
|
|
+ .direct_IO = noop_direct_IO,
|
|
|
+ .set_page_dirty = noop_set_page_dirty,
|
|
|
+ .invalidatepage = noop_invalidatepage,
|
|
|
+};
|