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 <h...@lst.de>
Reviewed-by: Dan Williams <dan.j.willi...@intel.com>
Reviewed-by: Darrick J. Wong <djw...@kernel.org>
---
 fs/xfs/xfs_super.c | 47 +++++++++++++++++++++++++++-------------------
 1 file changed, 28 insertions(+), 19 deletions(-)

diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
index e21459f9923a8..875fd3151d6c9 100644
--- a/fs/xfs/xfs_super.c
+++ b/fs/xfs/xfs_super.c
@@ -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,
@@ -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)) {
-- 
2.30.2


Reply via email to