summaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_iomap.c
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2021-11-29 11:21:52 +0100
committerDan Williams <dan.j.williams@intel.com>2021-12-04 08:58:53 -0800
commitc6f40468657d16e4010ef84bf32a761feb3469ea (patch)
treeb86852a866cadaac4e68c67b7a5e3419ad32d588 /fs/xfs/xfs_iomap.c
parente5c71954ca11df04d258a663a8a15262be0e17f6 (diff)
downloadlinux-c6f40468657d16e4010ef84bf32a761feb3469ea.tar.gz
linux-c6f40468657d16e4010ef84bf32a761feb3469ea.tar.bz2
linux-c6f40468657d16e4010ef84bf32a761feb3469ea.zip
fsdax: decouple zeroing from the iomap buffered I/O code
Unshare the DAX and iomap buffered I/O page zeroing code. This code previously did a IS_DAX check deep inside the iomap code, which in fact was the only DAX check in the code. Instead move these checks into the callers. Most callers already have DAX special casing anyway and XFS will need it for reflink support as well. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Dan Williams <dan.j.williams@intel.com> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Link: https://lore.kernel.org/r/20211129102203.2243509-19-hch@lst.de Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'fs/xfs/xfs_iomap.c')
-rw-r--r--fs/xfs/xfs_iomap.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c
index d6d71ae9f2ae..6a0c3b307bd7 100644
--- a/fs/xfs/xfs_iomap.c
+++ b/fs/xfs/xfs_iomap.c
@@ -28,7 +28,6 @@
#include "xfs_dquot.h"
#include "xfs_reflink.h"
-
#define XFS_ALLOC_ALIGN(mp, off) \
(((off) >> mp->m_allocsize_log) << mp->m_allocsize_log)
@@ -1321,6 +1320,9 @@ xfs_zero_range(
{
struct inode *inode = VFS_I(ip);
+ if (IS_DAX(inode))
+ return dax_zero_range(inode, pos, len, did_zero,
+ &xfs_buffered_write_iomap_ops);
return iomap_zero_range(inode, pos, len, did_zero,
&xfs_buffered_write_iomap_ops);
}
@@ -1333,6 +1335,9 @@ xfs_truncate_page(
{
struct inode *inode = VFS_I(ip);
+ if (IS_DAX(inode))
+ return dax_truncate_page(inode, pos, did_zero,
+ &xfs_buffered_write_iomap_ops);
return iomap_truncate_page(inode, pos, did_zero,
&xfs_buffered_write_iomap_ops);
}