xfs: convert mount flags to features
authorDave Chinner <dchinner@redhat.com>
Thu, 19 Aug 2021 01:46:52 +0000 (18:46 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Thu, 19 Aug 2021 17:07:12 +0000 (10:07 -0700)
Replace m_flags feature checks with xfs_has_<feature>() calls and
rework the setup code to set flags in m_features.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
23 files changed:
fs/xfs/libxfs/xfs_attr.c
fs/xfs/libxfs/xfs_attr_leaf.c
fs/xfs/libxfs/xfs_bmap.c
fs/xfs/libxfs/xfs_ialloc.c
fs/xfs/scrub/scrub.c
fs/xfs/xfs_acl.c
fs/xfs/xfs_bmap_util.c
fs/xfs/xfs_discard.c
fs/xfs/xfs_export.c
fs/xfs/xfs_file.c
fs/xfs/xfs_filestream.h
fs/xfs/xfs_icache.c
fs/xfs/xfs_inode.c
fs/xfs/xfs_inode.h
fs/xfs/xfs_ioctl.c
fs/xfs/xfs_iomap.c
fs/xfs/xfs_iops.c
fs/xfs/xfs_log.c
fs/xfs/xfs_log_cil.c
fs/xfs/xfs_mount.c
fs/xfs/xfs_mount.h
fs/xfs/xfs_super.c
fs/xfs/xfs_symlink.c

index d8a66470e236aa2fe0cb07281c3c16da164ac103..3b3ab9f75754a6375f02bf3611691c33691147af 100644 (file)
@@ -224,7 +224,7 @@ xfs_attr_try_sf_addname(
        if (!error && !(args->op_flags & XFS_DA_OP_NOTIME))
                xfs_trans_ichgtime(args->trans, dp, XFS_ICHGTIME_CHG);
 
-       if (dp->i_mount->m_flags & XFS_MOUNT_WSYNC)
+       if (xfs_has_wsync(dp->i_mount))
                xfs_trans_set_sync(args->trans);
 
        return error;
@@ -808,7 +808,7 @@ xfs_attr_set(
         * If this is a synchronous mount, make sure that the
         * transaction goes to disk before returning to the user.
         */
-       if (mp->m_flags & XFS_MOUNT_WSYNC)
+       if (xfs_has_wsync(mp))
                xfs_trans_set_sync(args->trans);
 
        if (!(args->op_flags & XFS_DA_OP_NOTIME))
index 4ed6196bb73eeb28c7ebbcde3155df1537b24662..7975b36fe6a371835d78069653aa1d5ab2c056b9 100644 (file)
@@ -568,7 +568,7 @@ xfs_attr_shortform_bytesfit(
         * literal area, but for the old format we are done if there is no
         * space in the fixed attribute fork.
         */
-       if (!(mp->m_flags & XFS_MOUNT_ATTR2))
+       if (!xfs_has_attr2(mp))
                return 0;
 
        dsize = dp->i_df.if_bytes;
@@ -621,21 +621,27 @@ xfs_attr_shortform_bytesfit(
 }
 
 /*
- * Switch on the ATTR2 superblock bit (implies also FEATURES2)
+ * Switch on the ATTR2 superblock bit (implies also FEATURES2) unless:
+ * - noattr2 mount option is set,
+ * - on-disk version bit says it is already set, or
+ * - the attr2 mount option is not set to enable automatic upgrade from attr1.
  */
 STATIC void
-xfs_sbversion_add_attr2(xfs_mount_t *mp, xfs_trans_t *tp)
+xfs_sbversion_add_attr2(
+       struct xfs_mount        *mp,
+       struct xfs_trans        *tp)
 {
-       if ((mp->m_flags & XFS_MOUNT_ATTR2) &&
-           !(xfs_has_attr2(mp))) {
-               spin_lock(&mp->m_sb_lock);
-               if (!xfs_has_attr2(mp)) {
-                       xfs_add_attr2(mp);
-                       spin_unlock(&mp->m_sb_lock);
-                       xfs_log_sb(tp);
-               } else
-                       spin_unlock(&mp->m_sb_lock);
-       }
+       if (xfs_has_noattr2(mp))
+               return;
+       if (mp->m_sb.sb_features2 & XFS_SB_VERSION2_ATTR2BIT)
+               return;
+       if (!xfs_has_attr2(mp))
+               return;
+
+       spin_lock(&mp->m_sb_lock);
+       xfs_add_attr2(mp);
+       spin_unlock(&mp->m_sb_lock);
+       xfs_log_sb(tp);
 }
 
 /*
@@ -810,8 +816,7 @@ xfs_attr_sf_removename(
         * Fix up the start offset of the attribute fork
         */
        totsize -= size;
-       if (totsize == sizeof(xfs_attr_sf_hdr_t) &&
-           (mp->m_flags & XFS_MOUNT_ATTR2) &&
+       if (totsize == sizeof(xfs_attr_sf_hdr_t) && xfs_has_attr2(mp) &&
            (dp->i_df.if_format != XFS_DINODE_FMT_BTREE) &&
            !(args->op_flags & XFS_DA_OP_ADDNAME)) {
                xfs_attr_fork_remove(dp, args->trans);
@@ -821,7 +826,7 @@ xfs_attr_sf_removename(
                ASSERT(dp->i_forkoff);
                ASSERT(totsize > sizeof(xfs_attr_sf_hdr_t) ||
                                (args->op_flags & XFS_DA_OP_ADDNAME) ||
-                               !(mp->m_flags & XFS_MOUNT_ATTR2) ||
+                               !xfs_has_attr2(mp) ||
                                dp->i_df.if_format == XFS_DINODE_FMT_BTREE);
                xfs_trans_log_inode(args->trans, dp,
                                        XFS_ILOG_CORE | XFS_ILOG_ADATA);
@@ -997,7 +1002,7 @@ xfs_attr_shortform_allfit(
                bytes += xfs_attr_sf_entsize_byname(name_loc->namelen,
                                        be16_to_cpu(name_loc->valuelen));
        }
-       if ((dp->i_mount->m_flags & XFS_MOUNT_ATTR2) &&
+       if (xfs_has_attr2(dp->i_mount) &&
            (dp->i_df.if_format != XFS_DINODE_FMT_BTREE) &&
            (bytes == sizeof(struct xfs_attr_sf_hdr)))
                return -1;
@@ -1122,7 +1127,7 @@ xfs_attr3_leaf_to_shortform(
                goto out;
 
        if (forkoff == -1) {
-               ASSERT(dp->i_mount->m_flags & XFS_MOUNT_ATTR2);
+               ASSERT(xfs_has_attr2(dp->i_mount));
                ASSERT(dp->i_df.if_format != XFS_DINODE_FMT_BTREE);
                xfs_attr_fork_remove(dp, args->trans);
                goto out;
index e806f8517012a693b2566b354fef42aed6202eb6..51f091108a20a59ca3fe7c536ead4444097108ed 100644 (file)
@@ -1047,7 +1047,7 @@ xfs_bmap_set_attrforkoff(
                ip->i_forkoff = xfs_attr_shortform_bytesfit(ip, size);
                if (!ip->i_forkoff)
                        ip->i_forkoff = default_size;
-               else if ((ip->i_mount->m_flags & XFS_MOUNT_ATTR2) && version)
+               else if (xfs_has_attr2(ip->i_mount) && version)
                        *version = 2;
                break;
        default:
@@ -3422,7 +3422,7 @@ xfs_bmap_compute_alignments(
        int                     stripe_align = 0;
 
        /* stripe alignment for allocation is determined by mount parameters */
-       if (mp->m_swidth && (mp->m_flags & XFS_MOUNT_SWALLOC))
+       if (mp->m_swidth && xfs_has_swalloc(mp))
                stripe_align = mp->m_swidth;
        else if (mp->m_dalign)
                stripe_align = mp->m_dalign;
index a00beb40d85f769b7aa4e789319eaa2c590f957b..89d9f3de43a820e9998eda74b22e25e90516633b 100644 (file)
@@ -712,7 +712,7 @@ xfs_ialloc_ag_alloc(
                 */
                isaligned = 0;
                if (igeo->ialloc_align) {
-                       ASSERT(!(args.mp->m_flags & XFS_MOUNT_NOALIGN));
+                       ASSERT(!xfs_has_noalign(args.mp));
                        args.alignment = args.mp->m_dalign;
                        isaligned = 1;
                } else
@@ -1953,8 +1953,7 @@ xfs_difree_inobt(
         * remove the chunk if the block size is large enough for multiple inode
         * chunks (that might not be free).
         */
-       if (!(mp->m_flags & XFS_MOUNT_IKEEP) &&
-           rec.ir_free == XFS_INOBT_ALL_FREE &&
+       if (!xfs_has_ikeep(mp) && rec.ir_free == XFS_INOBT_ALL_FREE &&
            mp->m_sb.sb_inopblock <= XFS_INODES_PER_CHUNK) {
                struct xfs_perag        *pag = agbp->b_pag;
 
@@ -2098,9 +2097,8 @@ xfs_difree_finobt(
         * enough for multiple chunks. Leave the finobt record to remain in sync
         * with the inobt.
         */
-       if (rec.ir_free == XFS_INOBT_ALL_FREE &&
-           mp->m_sb.sb_inopblock <= XFS_INODES_PER_CHUNK &&
-           !(mp->m_flags & XFS_MOUNT_IKEEP)) {
+       if (!xfs_has_ikeep(mp) && rec.ir_free == XFS_INOBT_ALL_FREE &&
+           mp->m_sb.sb_inopblock <= XFS_INODES_PER_CHUNK) {
                error = xfs_btree_delete(cur, &i);
                if (error)
                        goto error;
index 9bdc3f57a215d59a2ae06a06e2602e83d6d60fd5..6b3e7846a7071b67bfe41fb1807c569270efbce1 100644 (file)
@@ -480,7 +480,7 @@ xfs_scrub_metadata(
        if (XFS_FORCED_SHUTDOWN(mp))
                goto out;
        error = -ENOTRECOVERABLE;
-       if (mp->m_flags & XFS_MOUNT_NORECOVERY)
+       if (xfs_has_norecovery(mp))
                goto out;
 
        error = xchk_validate_inputs(mp, sm);
index d02bef24b32b2c38d6118e6312c4a081c7921d06..f7fc1d25b05839dc167283c65cd5331277f6fbc1 100644 (file)
@@ -232,7 +232,7 @@ xfs_acl_set_mode(
        inode->i_ctime = current_time(inode);
        xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
 
-       if (mp->m_flags & XFS_MOUNT_WSYNC)
+       if (xfs_has_wsync(mp))
                xfs_trans_set_sync(tp);
        return xfs_trans_commit(tp);
 }
index af0a61134d1fc52f85a0dad99d5f0b17a94971cb..a43220dba7395f60a8f5adee4ff4024091cc0921 100644 (file)
@@ -1822,7 +1822,7 @@ xfs_swap_extents(
         * If this is a synchronous mount, make sure that the
         * transaction goes to disk before returning to the user.
         */
-       if (mp->m_flags & XFS_MOUNT_WSYNC)
+       if (xfs_has_wsync(mp))
                xfs_trans_set_sync(tp);
 
        error = xfs_trans_commit(tp);
index 736df5660f1f465854bb6927294d0913d46a3eec..0191de8ce9cedd822ff2ec3a2191fefb37296cd2 100644 (file)
@@ -169,7 +169,7 @@ xfs_ioc_trim(
         * We haven't recovered the log, so we cannot use our bnobt-guided
         * storage zapping commands.
         */
-       if (mp->m_flags & XFS_MOUNT_NORECOVERY)
+       if (xfs_has_norecovery(mp))
                return -EROFS;
 
        if (copy_from_user(&range, urange, sizeof(range)))
index 1da59bdff245c1902e11e51e09fc120a0ad0e0b4..cb359ec3389b6370f4e71c21cafd16aabe641ac2 100644 (file)
@@ -63,7 +63,7 @@ xfs_fs_encode_fh(
         * large enough filesystem may contain them, thus the slightly
         * confusing looking conditional below.
         */
-       if (!(XFS_M(inode->i_sb)->m_flags & XFS_MOUNT_SMALL_INUMS) ||
+       if (!xfs_has_small_inums(XFS_M(inode->i_sb)) ||
            (XFS_M(inode->i_sb)->m_flags & XFS_MOUNT_32BITINODES))
                fileid_type |= XFS_FILEID_TYPE_64FLAG;
 
index fe31b53274cec271c1db4a93222dd20d88b31774..0fa02ea21adebdb4f5bfd456a10782b1ff4a76c8 100644 (file)
@@ -1122,7 +1122,7 @@ static inline bool xfs_file_sync_writes(struct file *filp)
 {
        struct xfs_inode        *ip = XFS_I(file_inode(filp));
 
-       if (ip->i_mount->m_flags & XFS_MOUNT_WSYNC)
+       if (xfs_has_wsync(ip->i_mount))
                return true;
        if (filp->f_flags & (__O_SYNC | O_DSYNC))
                return true;
index 3af963743e4d0be0fa373c999aaab176deb76388..403226ebb80bb39642839f43709aac4f9d320110 100644 (file)
@@ -21,7 +21,7 @@ static inline int
 xfs_inode_is_filestream(
        struct xfs_inode        *ip)
 {
-       return (ip->i_mount->m_flags & XFS_MOUNT_FILESTREAMS) ||
+       return xfs_has_filestreams(ip->i_mount) ||
                (ip->i_diflags & XFS_DIFLAG_FILESTREAM);
 }
 
index fdf2214f07bda64067657fda231bf283de6a5383..2e2d4550cdc087229123baf615e74ef06a165fae 100644 (file)
@@ -602,7 +602,7 @@ xfs_iget_cache_miss(
 
        /*
         * For version 5 superblocks, if we are initialising a new inode and we
-        * are not utilising the XFS_MOUNT_IKEEP inode cluster mode, we can
+        * are not utilising the XFS_FEAT_IKEEP inode cluster mode, we can
         * simply build the new inode core with a random generation number.
         *
         * For version 4 (and older) superblocks, log recovery is dependent on
@@ -611,7 +611,7 @@ xfs_iget_cache_miss(
         * initializing new inodes.
         */
        if (xfs_has_v3inodes(mp) &&
-           (flags & XFS_IGET_CREATE) && !(mp->m_flags & XFS_MOUNT_IKEEP)) {
+           (flags & XFS_IGET_CREATE) && !xfs_has_ikeep(mp)) {
                VFS_I(ip)->i_generation = prandom_u32();
        } else {
                struct xfs_buf          *bp;
@@ -967,8 +967,7 @@ static inline bool
 xfs_want_reclaim_sick(
        struct xfs_mount        *mp)
 {
-       return (mp->m_flags & XFS_MOUNT_UNMOUNTING) ||
-              (mp->m_flags & XFS_MOUNT_NORECOVERY) ||
+       return (mp->m_flags & XFS_MOUNT_UNMOUNTING) || xfs_has_norecovery(mp) ||
               XFS_FORCED_SHUTDOWN(mp);
 }
 
index 3d6e566146de41919d09026bb07831c24e823f7a..822f73d60f92af7af90a5945bc7d7f2684328779 100644 (file)
@@ -826,8 +826,7 @@ xfs_init_new_inode(
        inode->i_rdev = rdev;
        ip->i_projid = prid;
 
-       if (dir && !(dir->i_mode & S_ISGID) &&
-           (mp->m_flags & XFS_MOUNT_GRPID)) {
+       if (dir && !(dir->i_mode & S_ISGID) && xfs_has_grpid(mp)) {
                inode_fsuid_set(inode, mnt_userns);
                inode->i_gid = dir->i_gid;
                inode->i_mode = mode;
@@ -1068,7 +1067,7 @@ xfs_create(
         * create transaction goes to disk before returning to
         * the user.
         */
-       if (mp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC))
+       if (xfs_has_wsync(mp) || xfs_has_dirsync(mp))
                xfs_trans_set_sync(tp);
 
        /*
@@ -1160,7 +1159,7 @@ xfs_create_tmpfile(
        if (error)
                goto out_trans_cancel;
 
-       if (mp->m_flags & XFS_MOUNT_WSYNC)
+       if (xfs_has_wsync(mp))
                xfs_trans_set_sync(tp);
 
        /*
@@ -1294,7 +1293,7 @@ xfs_link(
         * link transaction goes to disk before returning to
         * the user.
         */
-       if (mp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC))
+       if (xfs_has_wsync(mp) || xfs_has_dirsync(mp))
                xfs_trans_set_sync(tp);
 
        return xfs_trans_commit(tp);
@@ -1679,7 +1678,7 @@ xfs_inode_needs_inactive(
                return false;
 
        /* If the log isn't running, push inodes straight to reclaim. */
-       if (XFS_FORCED_SHUTDOWN(mp) || (mp->m_flags & XFS_MOUNT_NORECOVERY))
+       if (XFS_FORCED_SHUTDOWN(mp) || xfs_has_norecovery(mp))
                return false;
 
        /* Metadata inodes require explicit resource cleanup. */
@@ -2855,7 +2854,7 @@ xfs_remove(
         * remove transaction goes to disk before returning to
         * the user.
         */
-       if (mp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC))
+       if (xfs_has_wsync(mp) || xfs_has_dirsync(mp))
                xfs_trans_set_sync(tp);
 
        error = xfs_trans_commit(tp);
@@ -2932,7 +2931,7 @@ xfs_finish_rename(
         * If this is a synchronous mount, make sure that the rename transaction
         * goes to disk before returning to the user.
         */
-       if (tp->t_mountp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC))
+       if (xfs_has_wsync(tp->t_mountp) || xfs_has_dirsync(tp->t_mountp))
                xfs_trans_set_sync(tp);
 
        return xfs_trans_commit(tp);
index 1f62b481d8c5bbce88b6b44cf4359c5da5aada0d..768f0d743158fdeb0fd53ef0bea163ca50d0ef25 100644 (file)
@@ -400,8 +400,7 @@ enum layout_break_reason {
  * new subdirectory gets S_ISGID bit from parent.
  */
 #define XFS_INHERIT_GID(pip)   \
-       (((pip)->i_mount->m_flags & XFS_MOUNT_GRPID) || \
-        (VFS_I(pip)->i_mode & S_ISGID))
+       (xfs_has_grpid((pip)->i_mount) || (VFS_I(pip)->i_mode & S_ISGID))
 
 int            xfs_release(struct xfs_inode *ip);
 void           xfs_inactive(struct xfs_inode *ip);
index 86150e0206cfb3a2b785aab45a896ecafea9b470..e42f09a2bee35e0b9d3bcd34da841e7d4a88f70e 100644 (file)
@@ -1237,8 +1237,7 @@ xfs_ioctl_setattr_prepare_dax(
        if (S_ISDIR(inode->i_mode))
                return;
 
-       if ((mp->m_flags & XFS_MOUNT_DAX_ALWAYS) ||
-           (mp->m_flags & XFS_MOUNT_DAX_NEVER))
+       if (xfs_has_dax_always(mp) || xfs_has_dax_never(mp))
                return;
 
        if (((fa->fsx_xflags & FS_XFLAG_DAX) &&
@@ -1274,7 +1273,7 @@ xfs_ioctl_setattr_get_trans(
        if (error)
                goto out_error;
 
-       if (mp->m_flags & XFS_MOUNT_WSYNC)
+       if (xfs_has_wsync(mp))
                xfs_trans_set_sync(tp);
 
        return tp;
index d8cd2583dedbf02e963b4793f896148e6dbaaa32..3e46ad99dd63fa055ff6bf58b92591e229b1255e 100644 (file)
@@ -132,7 +132,7 @@ xfs_eof_alignment(
                 * If mounted with the "-o swalloc" option the alignment is
                 * increased from the strip unit size to the stripe width.
                 */
-               if (mp->m_swidth && (mp->m_flags & XFS_MOUNT_SWALLOC))
+               if (mp->m_swidth && xfs_has_swalloc(mp))
                        align = mp->m_swidth;
                else if (mp->m_dalign)
                        align = mp->m_dalign;
@@ -994,7 +994,7 @@ xfs_buffered_write_iomap_begin(
                 * Determine the initial size of the preallocation.
                 * We clean up any extra preallocation when the file is closed.
                 */
-               if (mp->m_flags & XFS_MOUNT_ALLOCSIZE)
+               if (xfs_has_allocsize(mp))
                        prealloc_blocks = mp->m_allocsize_blocks;
                else
                        prealloc_blocks = xfs_iomap_prealloc_size(ip, allocfork,
index fd9a13381491d264e3f4fcdc603956443203f786..ff7ba534415cc5ba8a081e408de9f8d5f31c02f3 100644 (file)
@@ -558,10 +558,10 @@ xfs_stat_blksize(
         * default buffered I/O size, return that, otherwise return the compat
         * default.
         */
-       if (mp->m_flags & XFS_MOUNT_LARGEIO) {
+       if (xfs_has_large_iosize(mp)) {
                if (mp->m_swidth)
                        return XFS_FSB_TO_B(mp, mp->m_swidth);
-               if (mp->m_flags & XFS_MOUNT_ALLOCSIZE)
+               if (xfs_has_allocsize(mp))
                        return 1U << mp->m_allocsize_log;
        }
 
@@ -808,7 +808,7 @@ xfs_setattr_nonsize(
 
        XFS_STATS_INC(mp, xs_ig_attrchg);
 
-       if (mp->m_flags & XFS_MOUNT_WSYNC)
+       if (xfs_has_wsync(mp))
                xfs_trans_set_sync(tp);
        error = xfs_trans_commit(tp);
 
@@ -1037,7 +1037,7 @@ xfs_setattr_size(
 
        XFS_STATS_INC(mp, xs_ig_attrchg);
 
-       if (mp->m_flags & XFS_MOUNT_WSYNC)
+       if (xfs_has_wsync(mp))
                xfs_trans_set_sync(tp);
 
        error = xfs_trans_commit(tp);
@@ -1287,11 +1287,11 @@ xfs_inode_should_enable_dax(
 {
        if (!IS_ENABLED(CONFIG_FS_DAX))
                return false;
-       if (ip->i_mount->m_flags & XFS_MOUNT_DAX_NEVER)
+       if (xfs_has_dax_never(ip->i_mount))
                return false;
        if (!xfs_inode_supports_dax(ip))
                return false;
-       if (ip->i_mount->m_flags & XFS_MOUNT_DAX_ALWAYS)
+       if (xfs_has_dax_always(ip->i_mount))
                return true;
        if (ip->i_diflags2 & XFS_DIFLAG2_DAX)
                return true;
index 9a66d7169b3c6bb910d3f771b8de6f0d8eb567d3..f7c1fe964a0f5317a8218efc6d1eb437182d9980 100644 (file)
@@ -356,7 +356,7 @@ xfs_log_writable(
         * mounts allow internal writes for log recovery and unmount purposes,
         * so don't restrict that case.
         */
-       if (mp->m_flags & XFS_MOUNT_NORECOVERY)
+       if (xfs_has_norecovery(mp))
                return false;
        if (xfs_readonly_buftarg(mp->m_ddev_targp))
                return false;
@@ -633,7 +633,7 @@ xfs_log_mount(
        int             error = 0;
        int             min_logfsbs;
 
-       if (!(mp->m_flags & XFS_MOUNT_NORECOVERY)) {
+       if (!xfs_has_norecovery(mp)) {
                xfs_notice(mp, "Mounting V%d Filesystem",
                           XFS_SB_VERSION_NUM(&mp->m_sb));
        } else {
@@ -719,8 +719,8 @@ xfs_log_mount(
         * skip log recovery on a norecovery mount.  pretend it all
         * just worked.
         */
-       if (!(mp->m_flags & XFS_MOUNT_NORECOVERY)) {
-               int     readonly = (mp->m_flags & XFS_MOUNT_RDONLY);
+       if (!xfs_has_norecovery(mp)) {
+               bool    readonly = (mp->m_flags & XFS_MOUNT_RDONLY);
 
                if (readonly)
                        mp->m_flags &= ~XFS_MOUNT_RDONLY;
@@ -780,8 +780,8 @@ xfs_log_mount_finish(
        bool                    readonly = (mp->m_flags & XFS_MOUNT_RDONLY);
        int                     error = 0;
 
-       if (mp->m_flags & XFS_MOUNT_NORECOVERY) {
-               ASSERT(mp->m_flags & XFS_MOUNT_RDONLY);
+       if (xfs_has_norecovery(mp)) {
+               ASSERT(readonly);
                return 0;
        } else if (readonly) {
                /* Allow unlinked processing to proceed */
@@ -3941,7 +3941,7 @@ xfs_log_check_lsn(
         * resets the in-core LSN. We can't validate in this mode, but
         * modifications are not allowed anyways so just return true.
         */
-       if (mp->m_flags & XFS_MOUNT_NORECOVERY)
+       if (xfs_has_norecovery(mp))
                return true;
 
        /*
index ccd621ea9412cb04a2051359de3c4f03396940f1..6c93c8ada6f35f6c5e3a3a0f6766ab98689503b9 100644 (file)
@@ -571,7 +571,7 @@ xlog_discard_busy_extents(
        struct blk_plug         plug;
        int                     error = 0;
 
-       ASSERT(mp->m_flags & XFS_MOUNT_DISCARD);
+       ASSERT(xfs_has_discard(mp));
 
        blk_start_plug(&plug);
        list_for_each_entry(busyp, list, list) {
@@ -633,7 +633,7 @@ xlog_cil_committed(
 
        xfs_extent_busy_sort(&ctx->busy_extents);
        xfs_extent_busy_clear(mp, &ctx->busy_extents,
-                            (mp->m_flags & XFS_MOUNT_DISCARD) && !abort);
+                             xfs_has_discard(mp) && !abort);
 
        spin_lock(&ctx->cil->xc_push_lock);
        list_del(&ctx->committing);
index e85d5ccc37631562ee687a4841d53436f9db2585..8d7dc0423764b16bb383dceb40fbac0a5b2cdeed 100644 (file)
@@ -62,7 +62,7 @@ xfs_uuid_mount(
        /* Publish UUID in struct super_block */
        uuid_copy(&mp->m_super->s_uuid, uuid);
 
-       if (mp->m_flags & XFS_MOUNT_NOUUID)
+       if (xfs_has_nouuid(mp))
                return 0;
 
        if (uuid_is_null(uuid)) {
@@ -104,7 +104,7 @@ xfs_uuid_unmount(
        uuid_t                  *uuid = &mp->m_sb.sb_uuid;
        int                     i;
 
-       if (mp->m_flags & XFS_MOUNT_NOUUID)
+       if (xfs_has_nouuid(mp))
                return;
 
        mutex_lock(&xfs_uuid_table_mutex);
@@ -350,8 +350,7 @@ xfs_update_alignment(
                sbp->sb_unit = mp->m_dalign;
                sbp->sb_width = mp->m_swidth;
                mp->m_update_sb = true;
-       } else if ((mp->m_flags & XFS_MOUNT_NOALIGN) != XFS_MOUNT_NOALIGN &&
-                   xfs_has_dalign(mp)) {
+       } else if (!xfs_has_noalign(mp) && xfs_has_dalign(mp)) {
                mp->m_dalign = sbp->sb_unit;
                mp->m_swidth = sbp->sb_width;
        }
@@ -783,12 +782,15 @@ xfs_mountfs(
        /*
         * Now that we've recovered any pending superblock feature bit
         * additions, we can finish setting up the attr2 behaviour for the
-        * mount. If no attr2 mount options were specified, the we use the
-        * behaviour specified by the superblock feature bit.
+        * mount. The noattr2 option overrides the superblock flag, so only
+        * check the superblock feature flag if the mount option is not set.
         */
-       if (!(mp->m_flags & (XFS_MOUNT_ATTR2|XFS_MOUNT_NOATTR2)) &&
-           xfs_has_attr2(mp))
-               mp->m_flags |= XFS_MOUNT_ATTR2;
+       if (xfs_has_noattr2(mp)) {
+               mp->m_features &= ~XFS_FEAT_ATTR2;
+       } else if (!xfs_has_attr2(mp) &&
+                  (mp->m_sb.sb_features2 & XFS_SB_VERSION2_ATTR2BIT)) {
+               mp->m_features |= XFS_FEAT_ATTR2;
+       }
 
        /*
         * Get and sanity-check the root inode.
@@ -890,10 +892,8 @@ xfs_mountfs(
         * We use the same quiesce mechanism as the rw->ro remount, as they are
         * semantically identical operations.
         */
-       if ((mp->m_flags & (XFS_MOUNT_RDONLY|XFS_MOUNT_NORECOVERY)) ==
-                                                       XFS_MOUNT_RDONLY) {
+       if ((mp->m_flags & XFS_MOUNT_RDONLY) && !xfs_has_norecovery(mp))
                xfs_log_clean(mp);
-       }
 
        /*
         * Complete the quota initialisation, post-log-replay component.
index 1c086c4b872c63829e23818249d48da2f92ab4d9..037248e120345b659867c66c48bc4db2abb4d7c4 100644 (file)
@@ -370,32 +370,12 @@ __XFS_HAS_FEAT(nouuid, NOUUID)
                                                   must be synchronous except
                                                   for space allocations */
 #define XFS_MOUNT_UNMOUNTING   (1ULL << 1)     /* filesystem is unmounting */
-#define XFS_MOUNT_WAS_CLEAN    (1ULL << 3)
-#define XFS_MOUNT_FS_SHUTDOWN  (1ULL << 4)     /* atomic stop of all filesystem
+#define XFS_MOUNT_WAS_CLEAN    (1ULL << 2)
+#define XFS_MOUNT_FS_SHUTDOWN  (1ULL << 3)     /* atomic stop of all filesystem
                                                   operations, typically for
                                                   disk errors in metadata */
-#define XFS_MOUNT_DISCARD      (1ULL << 5)     /* discard unused blocks */
-#define XFS_MOUNT_NOALIGN      (1ULL << 7)     /* turn off stripe alignment
-                                                  allocations */
-#define XFS_MOUNT_ATTR2                (1ULL << 8)     /* allow use of attr2 format */
-#define XFS_MOUNT_GRPID                (1ULL << 9)     /* group-ID assigned from directory */
-#define XFS_MOUNT_NORECOVERY   (1ULL << 10)    /* no recovery - dirty fs */
-#define XFS_MOUNT_ALLOCSIZE    (1ULL << 12)    /* specified allocation size */
-#define XFS_MOUNT_SMALL_INUMS  (1ULL << 14)    /* user wants 32bit inodes */
 #define XFS_MOUNT_32BITINODES  (1ULL << 15)    /* inode32 allocator active */
-#define XFS_MOUNT_NOUUID       (1ULL << 16)    /* ignore uuid during mount */
-#define XFS_MOUNT_IKEEP                (1ULL << 18)    /* keep empty inode clusters*/
-#define XFS_MOUNT_SWALLOC      (1ULL << 19)    /* turn on stripe width
-                                                * allocation */
-#define XFS_MOUNT_RDONLY       (1ULL << 20)    /* read-only fs */
-#define XFS_MOUNT_DIRSYNC      (1ULL << 21)    /* synchronous directory ops */
-#define XFS_MOUNT_LARGEIO      (1ULL << 22)    /* report large preferred
-                                                * I/O size in stat() */
-#define XFS_MOUNT_FILESTREAMS  (1ULL << 24)    /* enable the filestreams
-                                                  allocator */
-#define XFS_MOUNT_NOATTR2      (1ULL << 25)    /* disable use of attr2 format */
-#define XFS_MOUNT_DAX_ALWAYS   (1ULL << 26)
-#define XFS_MOUNT_DAX_NEVER    (1ULL << 27)
+#define XFS_MOUNT_RDONLY       (1ULL << 4)     /* read-only fs */
 
 /*
  * If set, inactivation worker threads will be scheduled to process queued
index 5fc7f7d8e233a4837c89c78bf181144037906829..471dba910d391f2317a1d87d420e9deea10f5f3c 100644 (file)
@@ -84,15 +84,15 @@ xfs_mount_set_dax_mode(
 {
        switch (mode) {
        case XFS_DAX_INODE:
-               mp->m_flags &= ~(XFS_MOUNT_DAX_ALWAYS | XFS_MOUNT_DAX_NEVER);
+               mp->m_features &= ~(XFS_FEAT_DAX_ALWAYS | XFS_FEAT_DAX_NEVER);
                break;
        case XFS_DAX_ALWAYS:
-               mp->m_flags |= XFS_MOUNT_DAX_ALWAYS;
-               mp->m_flags &= ~XFS_MOUNT_DAX_NEVER;
+               mp->m_features |= XFS_FEAT_DAX_ALWAYS;
+               mp->m_features &= ~XFS_FEAT_DAX_NEVER;
                break;
        case XFS_DAX_NEVER:
-               mp->m_flags |= XFS_MOUNT_DAX_NEVER;
-               mp->m_flags &= ~XFS_MOUNT_DAX_ALWAYS;
+               mp->m_features |= XFS_FEAT_DAX_NEVER;
+               mp->m_features &= ~XFS_FEAT_DAX_ALWAYS;
                break;
        }
 }
@@ -176,33 +176,32 @@ xfs_fs_show_options(
 {
        static struct proc_xfs_info xfs_info_set[] = {
                /* the few simple ones we can get from the mount struct */
-               { XFS_MOUNT_IKEEP,              ",ikeep" },
-               { XFS_MOUNT_WSYNC,              ",wsync" },
-               { XFS_MOUNT_NOALIGN,            ",noalign" },
-               { XFS_MOUNT_SWALLOC,            ",swalloc" },
-               { XFS_MOUNT_NOUUID,             ",nouuid" },
-               { XFS_MOUNT_NORECOVERY,         ",norecovery" },
-               { XFS_MOUNT_ATTR2,              ",attr2" },
-               { XFS_MOUNT_FILESTREAMS,        ",filestreams" },
-               { XFS_MOUNT_GRPID,              ",grpid" },
-               { XFS_MOUNT_DISCARD,            ",discard" },
-               { XFS_MOUNT_LARGEIO,            ",largeio" },
-               { XFS_MOUNT_DAX_ALWAYS,         ",dax=always" },
-               { XFS_MOUNT_DAX_NEVER,          ",dax=never" },
+               { XFS_FEAT_IKEEP,               ",ikeep" },
+               { XFS_FEAT_WSYNC,               ",wsync" },
+               { XFS_FEAT_NOALIGN,             ",noalign" },
+               { XFS_FEAT_SWALLOC,             ",swalloc" },
+               { XFS_FEAT_NOUUID,              ",nouuid" },
+               { XFS_FEAT_NORECOVERY,          ",norecovery" },
+               { XFS_FEAT_ATTR2,               ",attr2" },
+               { XFS_FEAT_FILESTREAMS,         ",filestreams" },
+               { XFS_FEAT_GRPID,               ",grpid" },
+               { XFS_FEAT_DISCARD,             ",discard" },
+               { XFS_FEAT_LARGE_IOSIZE,        ",largeio" },
+               { XFS_FEAT_DAX_ALWAYS,          ",dax=always" },
+               { XFS_FEAT_DAX_NEVER,           ",dax=never" },
                { 0, NULL }
        };
        struct xfs_mount        *mp = XFS_M(root->d_sb);
        struct proc_xfs_info    *xfs_infop;
 
        for (xfs_infop = xfs_info_set; xfs_infop->flag; xfs_infop++) {
-               if (mp->m_flags & xfs_infop->flag)
+               if (mp->m_features & xfs_infop->flag)
                        seq_puts(m, xfs_infop->str);
        }
 
-       seq_printf(m, ",inode%d",
-               (mp->m_flags & XFS_MOUNT_SMALL_INUMS) ? 32 : 64);
+       seq_printf(m, ",inode%d", xfs_has_small_inums(mp) ? 32 : 64);
 
-       if (mp->m_flags & XFS_MOUNT_ALLOCSIZE)
+       if (xfs_has_allocsize(mp))
                seq_printf(m, ",allocsize=%dk",
                           (1 << mp->m_allocsize_log) >> 10);
 
@@ -247,10 +246,10 @@ xfs_fs_show_options(
 /*
  * Set parameters for inode allocation heuristics, taking into account
  * filesystem size and inode32/inode64 mount options; i.e. specifically
- * whether or not XFS_MOUNT_SMALL_INUMS is set.
+ * whether or not XFS_FEAT_SMALL_INUMS is set.
  *
  * Inode allocation patterns are altered only if inode32 is requested
- * (XFS_MOUNT_SMALL_INUMS), and the filesystem is sufficiently large.
+ * (XFS_FEAT_SMALL_INUMS), and the filesystem is sufficiently large.
  * If altered, XFS_MOUNT_32BITINODES is set as well.
  *
  * An agcount independent of that in the mount structure is provided
@@ -296,7 +295,7 @@ xfs_set_inode_alloc(
         * sufficiently large, set XFS_MOUNT_32BITINODES if we must alter
         * the allocator to accommodate the request.
         */
-       if ((mp->m_flags & XFS_MOUNT_SMALL_INUMS) && ino > XFS_MAXINUMBER_32)
+       if (xfs_has_small_inums(mp) && ino > XFS_MAXINUMBER_32)
                mp->m_flags |= XFS_MOUNT_32BITINODES;
        else
                mp->m_flags &= ~XFS_MOUNT_32BITINODES;
@@ -952,8 +951,7 @@ xfs_finish_flags(
        /*
         * V5 filesystems always use attr2 format for attributes.
         */
-       if (xfs_has_crc(mp) &&
-           (mp->m_flags & XFS_MOUNT_NOATTR2)) {
+       if (xfs_has_crc(mp) && xfs_has_noattr2(mp)) {
                xfs_warn(mp, "Cannot mount a V5 filesystem as noattr2. "
                             "attr2 is always enabled for V5 filesystems.");
                return -EINVAL;
@@ -1168,7 +1166,7 @@ xfs_fs_warn_deprecated(
         * already had the flag set
         */
        if ((fc->purpose & FS_CONTEXT_FOR_RECONFIGURE) &&
-                       !!(XFS_M(fc->root->d_sb)->m_flags & flag) == value)
+            !!(XFS_M(fc->root->d_sb)->m_features & flag) == value)
                return;
        xfs_warn(fc->s_fs_info, "%s mount option is deprecated.", param->key);
 }
@@ -1216,27 +1214,27 @@ xfs_fs_parse_param(
                if (suffix_kstrtoint(param->string, 10, &size))
                        return -EINVAL;
                parsing_mp->m_allocsize_log = ffs(size) - 1;
-               parsing_mp->m_flags |= XFS_MOUNT_ALLOCSIZE;
+               parsing_mp->m_features |= XFS_FEAT_ALLOCSIZE;
                return 0;
        case Opt_grpid:
        case Opt_bsdgroups:
-               parsing_mp->m_flags |= XFS_MOUNT_GRPID;
+               parsing_mp->m_features |= XFS_FEAT_GRPID;
                return 0;
        case Opt_nogrpid:
        case Opt_sysvgroups:
-               parsing_mp->m_flags &= ~XFS_MOUNT_GRPID;
+               parsing_mp->m_features &= ~XFS_FEAT_GRPID;
                return 0;
        case Opt_wsync:
-               parsing_mp->m_flags |= XFS_MOUNT_WSYNC;
+               parsing_mp->m_features |= XFS_FEAT_WSYNC;
                return 0;
        case Opt_norecovery:
-               parsing_mp->m_flags |= XFS_MOUNT_NORECOVERY;
+               parsing_mp->m_features |= XFS_FEAT_NORECOVERY;
                return 0;
        case Opt_noalign:
-               parsing_mp->m_flags |= XFS_MOUNT_NOALIGN;
+               parsing_mp->m_features |= XFS_FEAT_NOALIGN;
                return 0;
        case Opt_swalloc:
-               parsing_mp->m_flags |= XFS_MOUNT_SWALLOC;
+               parsing_mp->m_features |= XFS_FEAT_SWALLOC;
                return 0;
        case Opt_sunit:
                parsing_mp->m_dalign = result.uint_32;
@@ -1245,22 +1243,22 @@ xfs_fs_parse_param(
                parsing_mp->m_swidth = result.uint_32;
                return 0;
        case Opt_inode32:
-               parsing_mp->m_flags |= XFS_MOUNT_SMALL_INUMS;
+               parsing_mp->m_features |= XFS_FEAT_SMALL_INUMS;
                return 0;
        case Opt_inode64:
-               parsing_mp->m_flags &= ~XFS_MOUNT_SMALL_INUMS;
+               parsing_mp->m_features &= ~XFS_FEAT_SMALL_INUMS;
                return 0;
        case Opt_nouuid:
-               parsing_mp->m_flags |= XFS_MOUNT_NOUUID;
+               parsing_mp->m_features |= XFS_FEAT_NOUUID;
                return 0;
        case Opt_largeio:
-               parsing_mp->m_flags |= XFS_MOUNT_LARGEIO;
+               parsing_mp->m_features |= XFS_FEAT_LARGE_IOSIZE;
                return 0;
        case Opt_nolargeio:
-               parsing_mp->m_flags &= ~XFS_MOUNT_LARGEIO;
+               parsing_mp->m_features &= ~XFS_FEAT_LARGE_IOSIZE;
                return 0;
        case Opt_filestreams:
-               parsing_mp->m_flags |= XFS_MOUNT_FILESTREAMS;
+               parsing_mp->m_features |= XFS_FEAT_FILESTREAMS;
                return 0;
        case Opt_noquota:
                parsing_mp->m_qflags &= ~XFS_ALL_QUOTA_ACCT;
@@ -1293,10 +1291,10 @@ xfs_fs_parse_param(
                parsing_mp->m_qflags &= ~XFS_GQUOTA_ENFD;
                return 0;
        case Opt_discard:
-               parsing_mp->m_flags |= XFS_MOUNT_DISCARD;
+               parsing_mp->m_features |= XFS_FEAT_DISCARD;
                return 0;
        case Opt_nodiscard:
-               parsing_mp->m_flags &= ~XFS_MOUNT_DISCARD;
+               parsing_mp->m_features &= ~XFS_FEAT_DISCARD;
                return 0;
 #ifdef CONFIG_FS_DAX
        case Opt_dax:
@@ -1308,20 +1306,20 @@ xfs_fs_parse_param(
 #endif
        /* Following mount options will be removed in September 2025 */
        case Opt_ikeep:
-               xfs_fs_warn_deprecated(fc, param, XFS_MOUNT_IKEEP, true);
-               parsing_mp->m_flags |= XFS_MOUNT_IKEEP;
+               xfs_fs_warn_deprecated(fc, param, XFS_FEAT_IKEEP, true);
+               parsing_mp->m_features |= XFS_FEAT_IKEEP;
                return 0;
        case Opt_noikeep:
-               xfs_fs_warn_deprecated(fc, param, XFS_MOUNT_IKEEP, false);
-               parsing_mp->m_flags &= ~XFS_MOUNT_IKEEP;
+               xfs_fs_warn_deprecated(fc, param, XFS_FEAT_IKEEP, false);
+               parsing_mp->m_features &= ~XFS_FEAT_IKEEP;
                return 0;
        case Opt_attr2:
-               xfs_fs_warn_deprecated(fc, param, XFS_MOUNT_ATTR2, true);
-               parsing_mp->m_flags |= XFS_MOUNT_ATTR2;
+               xfs_fs_warn_deprecated(fc, param, XFS_FEAT_ATTR2, true);
+               parsing_mp->m_features |= XFS_FEAT_ATTR2;
                return 0;
        case Opt_noattr2:
-               xfs_fs_warn_deprecated(fc, param, XFS_MOUNT_NOATTR2, true);
-               parsing_mp->m_flags |= XFS_MOUNT_NOATTR2;
+               xfs_fs_warn_deprecated(fc, param, XFS_FEAT_NOATTR2, true);
+               parsing_mp->m_features |= XFS_FEAT_NOATTR2;
                return 0;
        default:
                xfs_warn(parsing_mp, "unknown mount option [%s].", param->key);
@@ -1335,24 +1333,23 @@ static int
 xfs_fs_validate_params(
        struct xfs_mount        *mp)
 {
-       /*
-        * no recovery flag requires a read-only mount
-        */
-       if ((mp->m_flags & XFS_MOUNT_NORECOVERY) &&
-           !(mp->m_flags & XFS_MOUNT_RDONLY)) {
+       /* No recovery flag requires a read-only mount */
+       if (xfs_has_norecovery(mp) && !(mp->m_flags & XFS_MOUNT_RDONLY)) {
                xfs_warn(mp, "no-recovery mounts must be read-only.");
                return -EINVAL;
        }
 
-       if ((mp->m_flags & (XFS_MOUNT_ATTR2|XFS_MOUNT_NOATTR2)) ==
-                         (XFS_MOUNT_ATTR2|XFS_MOUNT_NOATTR2)) {
+       /*
+        * We have not read the superblock at this point, so only the attr2
+        * mount option can set the attr2 feature by this stage.
+        */
+       if (xfs_has_attr2(mp) && xfs_has_noattr2(mp)) {
                xfs_warn(mp, "attr2 and noattr2 cannot both be specified.");
                return -EINVAL;
        }
 
 
-       if ((mp->m_flags & XFS_MOUNT_NOALIGN) &&
-           (mp->m_dalign || mp->m_swidth)) {
+       if (xfs_has_noalign(mp) && (mp->m_dalign || mp->m_swidth)) {
                xfs_warn(mp,
        "sunit and swidth options incompatible with the noalign option");
                return -EINVAL;
@@ -1396,7 +1393,7 @@ xfs_fs_validate_params(
                return -EINVAL;
        }
 
-       if ((mp->m_flags & XFS_MOUNT_ALLOCSIZE) &&
+       if (xfs_has_allocsize(mp) &&
            (mp->m_allocsize_log > XFS_MAX_IO_LOG ||
             mp->m_allocsize_log < XFS_MIN_IO_LOG)) {
                xfs_warn(mp, "invalid log iosize: %d [not %d-%d]",
@@ -1589,7 +1586,7 @@ xfs_fs_fill_super(
        if (XFS_SB_VERSION_NUM(&mp->m_sb) == XFS_SB_VERSION_5)
                sb->s_flags |= SB_I_VERSION;
 
-       if (mp->m_flags & XFS_MOUNT_DAX_ALWAYS) {
+       if (xfs_has_dax_always(mp)) {
                bool rtdev_is_dax = false, datadev_is_dax;
 
                xfs_warn(mp,
@@ -1613,13 +1610,13 @@ xfs_fs_fill_super(
                }
        }
 
-       if (mp->m_flags & XFS_MOUNT_DISCARD) {
+       if (xfs_has_discard(mp)) {
                struct request_queue *q = bdev_get_queue(sb->s_bdev);
 
                if (!blk_queue_discard(q)) {
                        xfs_warn(mp, "mounting with \"discard\" option, but "
                                        "the device does not support discard");
-                       mp->m_flags &= ~XFS_MOUNT_DISCARD;
+                       mp->m_features &= ~XFS_FEAT_DISCARD;
                }
        }
 
@@ -1701,7 +1698,7 @@ xfs_remount_rw(
        struct xfs_sb           *sbp = &mp->m_sb;
        int error;
 
-       if (mp->m_flags & XFS_MOUNT_NORECOVERY) {
+       if (xfs_has_norecovery(mp)) {
                xfs_warn(mp,
                        "ro->rw transition prohibited on norecovery mount");
                return -EINVAL;
@@ -1842,16 +1839,14 @@ xfs_fs_reconfigure(
        sync_filesystem(mp->m_super);
 
        /* inode32 -> inode64 */
-       if ((mp->m_flags & XFS_MOUNT_SMALL_INUMS) &&
-           !(new_mp->m_flags & XFS_MOUNT_SMALL_INUMS)) {
-               mp->m_flags &= ~XFS_MOUNT_SMALL_INUMS;
+       if (xfs_has_small_inums(mp) && !xfs_has_small_inums(new_mp)) {
+               mp->m_features &= ~XFS_FEAT_SMALL_INUMS;
                mp->m_maxagi = xfs_set_inode_alloc(mp, sbp->sb_agcount);
        }
 
        /* inode64 -> inode32 */
-       if (!(mp->m_flags & XFS_MOUNT_SMALL_INUMS) &&
-           (new_mp->m_flags & XFS_MOUNT_SMALL_INUMS)) {
-               mp->m_flags |= XFS_MOUNT_SMALL_INUMS;
+       if (!xfs_has_small_inums(mp) && xfs_has_small_inums(new_mp)) {
+               mp->m_features |= XFS_FEAT_SMALL_INUMS;
                mp->m_maxagi = xfs_set_inode_alloc(mp, sbp->sb_agcount);
        }
 
@@ -1932,9 +1927,9 @@ static int xfs_init_fs_context(
        if (fc->sb_flags & SB_RDONLY)
                mp->m_flags |= XFS_MOUNT_RDONLY;
        if (fc->sb_flags & SB_DIRSYNC)
-               mp->m_flags |= XFS_MOUNT_DIRSYNC;
+               mp->m_features |= XFS_FEAT_DIRSYNC;
        if (fc->sb_flags & SB_SYNCHRONOUS)
-               mp->m_flags |= XFS_MOUNT_WSYNC;
+               mp->m_features |= XFS_FEAT_WSYNC;
 
        fc->s_fs_info = mp;
        fc->ops = &xfs_context_ops;
index 707d36556bc5b11b6ac8107b931a7051d3322d26..701a78fbf7a93de71912795e426725cbba32e93d 100644 (file)
@@ -321,9 +321,8 @@ xfs_symlink(
         * symlink transaction goes to disk before returning to
         * the user.
         */
-       if (mp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC)) {
+       if (xfs_has_wsync(mp) || xfs_has_dirsync(mp))
                xfs_trans_set_sync(tp);
-       }
 
        error = xfs_trans_commit(tp);
        if (error)