diff options
author | Dave Chinner <dchinner@redhat.com> | 2015-06-03 19:19:10 -0400 |
---|---|---|
committer | Dave Chinner <david@fromorbit.com> | 2015-06-03 19:19:10 -0400 |
commit | 9969441f9f86a8a7de8c36514fa789e5f5d83145 (patch) | |
tree | f041302d6b5bfd303dfcd065afc036f37be5f33c | |
parent | 4f69f578a87d39c20b1ff70005a125e4594c3de8 (diff) |
xfs: add DAX truncate support
When we truncate a DAX file, we need to call through the DAX page
truncation path rather than through block_truncate_page() so that
mappings and block zeroing are all handled correctly. Otherwise,
truncate does not need to change.
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
-rw-r--r-- | fs/xfs/xfs_iops.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index f4cd7204e236..0994f95c368f 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c | |||
@@ -851,7 +851,11 @@ xfs_setattr_size( | |||
851 | * to hope that the caller sees ENOMEM and retries the truncate | 851 | * to hope that the caller sees ENOMEM and retries the truncate |
852 | * operation. | 852 | * operation. |
853 | */ | 853 | */ |
854 | error = block_truncate_page(inode->i_mapping, newsize, xfs_get_blocks); | 854 | if (IS_DAX(inode)) |
855 | error = dax_truncate_page(inode, newsize, xfs_get_blocks_direct); | ||
856 | else | ||
857 | error = block_truncate_page(inode->i_mapping, newsize, | ||
858 | xfs_get_blocks); | ||
855 | if (error) | 859 | if (error) |
856 | return error; | 860 | return error; |
857 | truncate_setsize(inode, newsize); | 861 | truncate_setsize(inode, newsize); |