xfs: factor out a xfs_setup_dax_always helper
authorChristoph Hellwig <hch@lst.de>
Mon, 29 Nov 2021 10:21:41 +0000 (11:21 +0100)
committerDan Williams <dan.j.williams@intel.com>
Sat, 4 Dec 2021 16:58:51 +0000 (08:58 -0800)
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>
fs/xfs/xfs_super.c

index e21459f..875fd31 100644 (file)
@@ -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)) {