mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-02 23:27:06 +00:00
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: Dave Chinner <dchinner@redhat.com> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Ira Weiny <ira.weiny@intel.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
This commit is contained in:
parent
8d6c3446ec
commit
32dbc5655f
1 changed files with 22 additions and 6 deletions
|
@ -1238,13 +1238,12 @@ xfs_inode_supports_dax(
|
||||||
{
|
{
|
||||||
struct xfs_mount *mp = ip->i_mount;
|
struct xfs_mount *mp = ip->i_mount;
|
||||||
|
|
||||||
/* Only supported on non-reflinked files. */
|
/* Only supported on regular files. */
|
||||||
if (!S_ISREG(VFS_I(ip)->i_mode) || xfs_is_reflink_inode(ip))
|
if (!S_ISREG(VFS_I(ip)->i_mode))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* DAX mount option or DAX iflag must be set. */
|
/* Only supported on non-reflinked files. */
|
||||||
if (!(mp->m_flags & XFS_MOUNT_DAX_ALWAYS) &&
|
if (xfs_is_reflink_inode(ip))
|
||||||
!(ip->i_d.di_flags2 & XFS_DIFLAG2_DAX))
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* Block size must match page size */
|
/* Block size must match page size */
|
||||||
|
@ -1255,6 +1254,23 @@ xfs_inode_supports_dax(
|
||||||
return xfs_inode_buftarg(ip)->bt_daxdev != NULL;
|
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
|
STATIC void
|
||||||
xfs_diflags_to_iflags(
|
xfs_diflags_to_iflags(
|
||||||
struct inode *inode,
|
struct inode *inode,
|
||||||
|
@ -1273,7 +1289,7 @@ xfs_diflags_to_iflags(
|
||||||
inode->i_flags |= S_SYNC;
|
inode->i_flags |= S_SYNC;
|
||||||
if (flags & XFS_DIFLAG_NOATIME)
|
if (flags & XFS_DIFLAG_NOATIME)
|
||||||
inode->i_flags |= S_NOATIME;
|
inode->i_flags |= S_NOATIME;
|
||||||
if (xfs_inode_supports_dax(ip))
|
if (xfs_inode_should_enable_dax(ip))
|
||||||
inode->i_flags |= S_DAX;
|
inode->i_flags |= S_DAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue