Commit f7bf7437 authored by Ira Weiny's avatar Ira Weiny Committed by Darrick J. Wong
Browse files

fs/xfs: Create function xfs_inode_should_enable_dax()



xfs_inode_supports_dax() should reflect if the inode can support DAX not
that it is enabled for DAX.

Change the use of xfs_inode_supports_dax() to reflect only if the inode
and underlying storage support dax.

Add a new function xfs_inode_should_enable_dax() which reflects if the
inode should be enabled for DAX.

Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: default avatarIra Weiny <ira.weiny@intel.com>
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
parent 02beb268
Loading
Loading
Loading
Loading
+22 −6
Original line number Diff line number Diff line
@@ -1243,13 +1243,12 @@ xfs_inode_supports_dax(
{
	struct xfs_mount	*mp = ip->i_mount;

	/* Only supported on non-reflinked files. */
	if (!S_ISREG(VFS_I(ip)->i_mode) || xfs_is_reflink_inode(ip))
	/* Only supported on regular files. */
	if (!S_ISREG(VFS_I(ip)->i_mode))
		return false;

	/* DAX mount option or DAX iflag must be set. */
	if (!(mp->m_flags & XFS_MOUNT_DAX_ALWAYS) &&
	    !(ip->i_d.di_flags2 & XFS_DIFLAG2_DAX))
	/* Only supported on non-reflinked files. */
	if (xfs_is_reflink_inode(ip))
		return false;

	/* Block size must match page size */
@@ -1260,6 +1259,23 @@ xfs_inode_supports_dax(
	return xfs_inode_buftarg(ip)->bt_daxdev != NULL;
}

static bool
xfs_inode_should_enable_dax(
	struct xfs_inode *ip)
{
	if (!IS_ENABLED(CONFIG_FS_DAX))
		return false;
	if (ip->i_mount->m_flags & XFS_MOUNT_DAX_NEVER)
		return false;
	if (!xfs_inode_supports_dax(ip))
		return false;
	if (ip->i_mount->m_flags & XFS_MOUNT_DAX_ALWAYS)
		return true;
	if (ip->i_d.di_flags2 & XFS_DIFLAG2_DAX)
		return true;
	return false;
}

STATIC void
xfs_diflags_to_iflags(
	struct inode		*inode,
@@ -1278,7 +1294,7 @@ xfs_diflags_to_iflags(
		inode->i_flags |= S_SYNC;
	if (flags & XFS_DIFLAG_NOATIME)
		inode->i_flags |= S_NOATIME;
	if (xfs_inode_supports_dax(ip))
	if (xfs_inode_should_enable_dax(ip))
		inode->i_flags |= S_DAX;
}