Skip to content

Commit

Permalink
xfs: factor out a xfs_setup_dax_always helper
Browse files Browse the repository at this point in the history
Factor out another DAX setup helper to simplify future changes.  Also
move the experimental warning after the checks to not clutter the log
too much if the setup failed.

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-8-hch@lst.de
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
  • Loading branch information
Christoph Hellwig authored and Dan Williams committed Dec 4, 2021
1 parent 0c44587 commit 679a994
Showing 1 changed file with 28 additions and 19 deletions.
47 changes: 28 additions & 19 deletions fs/xfs/xfs_super.c
Original file line number Diff line number Diff line change
Expand Up @@ -340,6 +340,32 @@ xfs_buftarg_is_dax(
bdev_nr_sectors(bt->bt_bdev));
}

static int
xfs_setup_dax_always(
struct xfs_mount *mp)
{
struct super_block *sb = mp->m_super;

if (!xfs_buftarg_is_dax(sb, mp->m_ddev_targp) &&
(!mp->m_rtdev_targp || !xfs_buftarg_is_dax(sb, mp->m_rtdev_targp))) {
xfs_alert(mp,
"DAX unsupported by block device. Turning off DAX.");
goto disable_dax;
}

if (xfs_has_reflink(mp)) {
xfs_alert(mp, "DAX and reflink cannot be used together!");
return -EINVAL;
}

xfs_warn(mp, "DAX enabled. Warning: EXPERIMENTAL, use at your own risk");
return 0;

disable_dax:
xfs_mount_set_dax_mode(mp, XFS_DAX_NEVER);
return 0;
}

STATIC int
xfs_blkdev_get(
xfs_mount_t *mp,
Expand Down Expand Up @@ -1593,26 +1619,9 @@ xfs_fs_fill_super(
sb->s_flags |= SB_I_VERSION;

if (xfs_has_dax_always(mp)) {
bool rtdev_is_dax = false, datadev_is_dax;

xfs_warn(mp,
"DAX enabled. Warning: EXPERIMENTAL, use at your own risk");

datadev_is_dax = xfs_buftarg_is_dax(sb, mp->m_ddev_targp);
if (mp->m_rtdev_targp)
rtdev_is_dax = xfs_buftarg_is_dax(sb,
mp->m_rtdev_targp);
if (!rtdev_is_dax && !datadev_is_dax) {
xfs_alert(mp,
"DAX unsupported by block device. Turning off DAX.");
xfs_mount_set_dax_mode(mp, XFS_DAX_NEVER);
}
if (xfs_has_reflink(mp)) {
xfs_alert(mp,
"DAX and reflink cannot be used together!");
error = -EINVAL;
error = xfs_setup_dax_always(mp);
if (error)
goto out_filestream_unmount;
}
}

if (xfs_has_discard(mp)) {
Expand Down

0 comments on commit 679a994

Please sign in to comment.