On Sat, Feb 08, 2020 at 11:34:36AM -0800, ira.weiny@xxxxxxxxx wrote: > From: Ira Weiny <ira.weiny@xxxxxxxxx> > > xfs_inode_supports_dax() should reflect if the inode can support DAX not > that it is enabled for DAX. Leave that to other helper functions. > > Change the caller of xfs_inode_supports_dax() to call > xfs_inode_use_dax() which reflects new logic to override the effective > DAX flag with either the mount option or the physical DAX flag. > > To make the logic clear create 2 helper functions for the mount and > physical flag. > > Signed-off-by: Ira Weiny <ira.weiny@xxxxxxxxx> > --- > fs/xfs/xfs_iops.c | 32 ++++++++++++++++++++++++++------ > 1 file changed, 26 insertions(+), 6 deletions(-) > > diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c > index 81f2f93caec0..a7db50d923d4 100644 > --- a/fs/xfs/xfs_iops.c > +++ b/fs/xfs/xfs_iops.c > @@ -1236,6 +1236,15 @@ static const struct inode_operations xfs_inline_symlink_inode_operations = { > .update_time = xfs_vn_update_time, > }; > > +static bool > +xfs_inode_mount_is_dax( > + struct xfs_inode *ip) > +{ > + struct xfs_mount *mp = ip->i_mount; > + > + return (mp->m_flags & XFS_MOUNT_DAX) == XFS_MOUNT_DAX; > +} > + > /* Figure out if this file actually supports DAX. */ > static bool > xfs_inode_supports_dax( > @@ -1247,11 +1256,6 @@ xfs_inode_supports_dax( > if (!S_ISREG(VFS_I(ip)->i_mode) || xfs_is_reflink_inode(ip)) > return false; > > - /* DAX mount option or DAX iflag must be set. */ > - if (!(mp->m_flags & XFS_MOUNT_DAX) && > - !(ip->i_d.di_flags2 & XFS_DIFLAG2_DAX)) > - return false; > - > /* Block size must match page size */ > if (mp->m_sb.sb_blocksize != PAGE_SIZE) > return false; > @@ -1260,6 +1264,22 @@ xfs_inode_supports_dax( > return xfs_inode_buftarg(ip)->bt_daxdev != NULL; > } > > +static bool > +xfs_inode_is_dax( > + struct xfs_inode *ip) > +{ > + return (ip->i_d.di_flags2 & XFS_DIFLAG2_DAX) == XFS_DIFLAG2_DAX; > +} I don't think these wrappers add any value at all - the naming of them is entirely confusing, too. e.g. "inode is dax" doesn't tell me that it is checking the on disk flags - it doesn't tell me how it is different to IS_DAX, or why I'd use one versus the other. And then xfs_inode_mount_is_dax() is just... worse. Naming is hard. :) > + > +static bool > +xfs_inode_use_dax( > + struct xfs_inode *ip) > +{ > + return xfs_inode_supports_dax(ip) && > + (xfs_inode_mount_is_dax(ip) || > + xfs_inode_is_dax(ip)); > +} Urk. Naming - we're not "using dax" here, we are checkign to see if we should enable DAX on this inode. IOWs: static bool xfs_inode_enable_dax( struct xfs_inode *ip) { if (!xfs_inode_supports_dax(ip)) return false; if (ip->i_d.di_flags2 & XFS_DIFLAG2_DAX) return true; if (ip->i_mount->m_flags & XFS_MOUNT_DAX) return true; return false; } Cheers, Dave. -- Dave Chinner david@xxxxxxxxxxxxx