From: "Darrick J. Wong" <djwong@kernel.org>
To: Dave Chinner <david@fromorbit.com>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH 07/16] xfs: convert mount flags to features
Date: Wed, 18 Aug 2021 19:14:17 -0700 [thread overview]
Message-ID: <20210819021417.GL12640@magnolia> (raw)
In-Reply-To: <20210818235935.149431-8-david@fromorbit.com>
On Thu, Aug 19, 2021 at 09:59:26AM +1000, Dave Chinner wrote:
> From: Dave Chinner <dchinner@redhat.com>
>
> 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>
The attr2 upgrade logic looks correct now. Aside from removing the
ability to downgrade to attr1 via 'noattr2' (which only ever worked for
deprecated V4 filesystems), I think the attr2 handling is the same as
before.
The rest looks about the same as last time.
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
--D
> ---
> fs/xfs/libxfs/xfs_attr.c | 4 +-
> fs/xfs/libxfs/xfs_attr_leaf.c | 41 +++++-----
> fs/xfs/libxfs/xfs_bmap.c | 4 +-
> fs/xfs/libxfs/xfs_ialloc.c | 10 +--
> fs/xfs/scrub/scrub.c | 2 +-
> fs/xfs/xfs_acl.c | 2 +-
> fs/xfs/xfs_bmap_util.c | 2 +-
> fs/xfs/xfs_discard.c | 2 +-
> fs/xfs/xfs_export.c | 2 +-
> fs/xfs/xfs_file.c | 2 +-
> fs/xfs/xfs_filestream.h | 2 +-
> fs/xfs/xfs_icache.c | 7 +-
> fs/xfs/xfs_inode.c | 15 ++--
> fs/xfs/xfs_inode.h | 3 +-
> fs/xfs/xfs_ioctl.c | 5 +-
> fs/xfs/xfs_iomap.c | 4 +-
> fs/xfs/xfs_iops.c | 12 +--
> fs/xfs/xfs_log.c | 14 ++--
> fs/xfs/xfs_log_cil.c | 4 +-
> fs/xfs/xfs_mount.c | 24 +++---
> fs/xfs/xfs_mount.h | 26 +------
> fs/xfs/xfs_super.c | 141 ++++++++++++++++------------------
> fs/xfs/xfs_symlink.c | 3 +-
> 23 files changed, 152 insertions(+), 179 deletions(-)
>
> diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c
> index d8a66470e236..3b3ab9f75754 100644
> --- a/fs/xfs/libxfs/xfs_attr.c
> +++ b/fs/xfs/libxfs/xfs_attr.c
> @@ -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))
> diff --git a/fs/xfs/libxfs/xfs_attr_leaf.c b/fs/xfs/libxfs/xfs_attr_leaf.c
> index 4ed6196bb73e..7975b36fe6a3 100644
> --- a/fs/xfs/libxfs/xfs_attr_leaf.c
> +++ b/fs/xfs/libxfs/xfs_attr_leaf.c
> @@ -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;
> diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
> index e806f8517012..51f091108a20 100644
> --- a/fs/xfs/libxfs/xfs_bmap.c
> +++ b/fs/xfs/libxfs/xfs_bmap.c
> @@ -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;
> diff --git a/fs/xfs/libxfs/xfs_ialloc.c b/fs/xfs/libxfs/xfs_ialloc.c
> index 86a5ff66b220..52f0e8c21d93 100644
> --- a/fs/xfs/libxfs/xfs_ialloc.c
> +++ b/fs/xfs/libxfs/xfs_ialloc.c
> @@ -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;
> diff --git a/fs/xfs/scrub/scrub.c b/fs/xfs/scrub/scrub.c
> index 2bed6bc573da..d9534fe0c69b 100644
> --- a/fs/xfs/scrub/scrub.c
> +++ b/fs/xfs/scrub/scrub.c
> @@ -483,7 +483,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);
> diff --git a/fs/xfs/xfs_acl.c b/fs/xfs/xfs_acl.c
> index d02bef24b32b..f7fc1d25b058 100644
> --- a/fs/xfs/xfs_acl.c
> +++ b/fs/xfs/xfs_acl.c
> @@ -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);
> }
> diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c
> index af0a61134d1f..a43220dba739 100644
> --- a/fs/xfs/xfs_bmap_util.c
> +++ b/fs/xfs/xfs_bmap_util.c
> @@ -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);
> diff --git a/fs/xfs/xfs_discard.c b/fs/xfs/xfs_discard.c
> index 736df5660f1f..0191de8ce9ce 100644
> --- a/fs/xfs/xfs_discard.c
> +++ b/fs/xfs/xfs_discard.c
> @@ -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)))
> diff --git a/fs/xfs/xfs_export.c b/fs/xfs/xfs_export.c
> index 1da59bdff245..cb359ec3389b 100644
> --- a/fs/xfs/xfs_export.c
> +++ b/fs/xfs/xfs_export.c
> @@ -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;
>
> diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
> index fe31b53274ce..0fa02ea21ade 100644
> --- a/fs/xfs/xfs_file.c
> +++ b/fs/xfs/xfs_file.c
> @@ -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;
> diff --git a/fs/xfs/xfs_filestream.h b/fs/xfs/xfs_filestream.h
> index 3af963743e4d..403226ebb80b 100644
> --- a/fs/xfs/xfs_filestream.h
> +++ b/fs/xfs/xfs_filestream.h
> @@ -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);
> }
>
> diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c
> index ccc4df4b6b27..35fec850af69 100644
> --- a/fs/xfs/xfs_icache.c
> +++ b/fs/xfs/xfs_icache.c
> @@ -611,7 +611,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
> @@ -620,7 +620,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;
> @@ -976,8 +976,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);
> }
>
> diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
> index 3d6e566146de..822f73d60f92 100644
> --- a/fs/xfs/xfs_inode.c
> +++ b/fs/xfs/xfs_inode.c
> @@ -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);
> diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h
> index 1f62b481d8c5..768f0d743158 100644
> --- a/fs/xfs/xfs_inode.h
> +++ b/fs/xfs/xfs_inode.h
> @@ -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);
> diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
> index 86150e0206cf..e42f09a2bee3 100644
> --- a/fs/xfs/xfs_ioctl.c
> +++ b/fs/xfs/xfs_ioctl.c
> @@ -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;
> diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c
> index d8cd2583dedb..3e46ad99dd63 100644
> --- a/fs/xfs/xfs_iomap.c
> +++ b/fs/xfs/xfs_iomap.c
> @@ -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,
> diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c
> index fd9a13381491..ff7ba534415c 100644
> --- a/fs/xfs/xfs_iops.c
> +++ b/fs/xfs/xfs_iops.c
> @@ -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;
> diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c
> index c927ad6d3eb7..fa59be56ee46 100644
> --- a/fs/xfs/xfs_log.c
> +++ b/fs/xfs/xfs_log.c
> @@ -361,7 +361,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;
> @@ -638,7 +638,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 {
> @@ -724,8 +724,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;
> @@ -785,8 +785,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 */
> @@ -3937,7 +3937,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;
>
> /*
> diff --git a/fs/xfs/xfs_log_cil.c b/fs/xfs/xfs_log_cil.c
> index f6c4e4e8f112..d69ea3cc51cb 100644
> --- a/fs/xfs/xfs_log_cil.c
> +++ b/fs/xfs/xfs_log_cil.c
> @@ -543,7 +543,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) {
> @@ -605,7 +605,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);
> diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c
> index e85d5ccc3763..8d7dc0423764 100644
> --- a/fs/xfs/xfs_mount.c
> +++ b/fs/xfs/xfs_mount.c
> @@ -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.
> diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h
> index a8a3a73749cf..47fb8008f0e3 100644
> --- a/fs/xfs/xfs_mount.h
> +++ b/fs/xfs/xfs_mount.h
> @@ -371,32 +371,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
> diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
> index bf9ca921ebed..21d3257404f1 100644
> --- a/fs/xfs/xfs_super.c
> +++ b/fs/xfs/xfs_super.c
> @@ -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;
> @@ -961,8 +960,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;
> @@ -1177,7 +1175,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);
> }
> @@ -1225,27 +1223,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;
> @@ -1254,22 +1252,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;
> @@ -1302,10 +1300,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:
> @@ -1317,20 +1315,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);
> @@ -1344,24 +1342,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;
> @@ -1405,7 +1402,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]",
> @@ -1598,7 +1595,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,
> @@ -1622,13 +1619,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;
> }
> }
>
> @@ -1710,7 +1707,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;
> @@ -1851,16 +1848,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);
> }
>
> @@ -1941,9 +1936,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;
> diff --git a/fs/xfs/xfs_symlink.c b/fs/xfs/xfs_symlink.c
> index 707d36556bc5..701a78fbf7a9 100644
> --- a/fs/xfs/xfs_symlink.c
> +++ b/fs/xfs/xfs_symlink.c
> @@ -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)
> --
> 2.31.1
>
next prev parent reply other threads:[~2021-08-19 2:14 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-18 23:59 [PATCH 00/16 v3] xfs: rework feature flags Dave Chinner
2021-08-18 23:59 ` [PATCH 01/16] xfs: sb verifier doesn't handle uncached sb buffer Dave Chinner
2021-08-18 23:59 ` [PATCH 02/16] xfs: rename xfs_has_attr() Dave Chinner
2021-08-18 23:59 ` [PATCH 03/16] xfs: rework attr2 feature and mount options Dave Chinner
2021-08-18 23:59 ` [PATCH 04/16] xfs: reflect sb features in xfs_mount Dave Chinner
2021-08-18 23:59 ` [PATCH 05/16] xfs: replace xfs_sb_version checks with feature flag checks Dave Chinner
2021-08-18 23:59 ` [PATCH 06/16] xfs: consolidate mount option features in m_features Dave Chinner
2021-08-18 23:59 ` [PATCH 07/16] xfs: convert mount flags to features Dave Chinner
2021-08-19 2:14 ` Darrick J. Wong [this message]
2021-08-18 23:59 ` [PATCH 08/16] xfs: convert remaining mount flags to state flags Dave Chinner
2021-08-18 23:59 ` [PATCH 09/16] xfs: replace XFS_FORCED_SHUTDOWN with xfs_is_shutdown Dave Chinner
2021-08-18 23:59 ` [PATCH 10/16] xfs: convert xfs_fs_geometry to use mount feature checks Dave Chinner
2021-08-18 23:59 ` [PATCH 11/16] xfs: open code sb verifier " Dave Chinner
2021-08-18 23:59 ` [PATCH 12/16] xfs: convert scrub to use mount-based " Dave Chinner
2021-08-18 23:59 ` [PATCH 13/16] xfs: convert xfs_sb_version_has checks to use mount features Dave Chinner
2021-08-18 23:59 ` [PATCH 14/16] xfs: remove unused xfs_sb_version_has wrappers Dave Chinner
2021-08-18 23:59 ` [PATCH 15/16] xfs: introduce xfs_sb_is_v5 helper Dave Chinner
2021-08-18 23:59 ` [PATCH 16/16] xfs: kill xfs_sb_version_has_v3inode() Dave Chinner
-- strict thread matches above, loose matches on Subject: below --
2021-08-10 5:24 [PATCH 00/16 v2] xfs: rework feature flags Dave Chinner
2021-08-10 5:24 ` [PATCH 07/16] xfs: convert mount flags to features Dave Chinner
2021-08-11 0:38 ` Darrick J. Wong
2021-08-11 23:28 ` Darrick J. Wong
2021-08-18 2:25 ` Dave Chinner
2021-07-14 4:18 [PATCH 00/16] xfs: rework feature flags Dave Chinner
2021-07-14 4:19 ` [PATCH 07/16] xfs: convert mount flags to features Dave Chinner
2021-07-14 23:07 ` Darrick J. Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210819021417.GL12640@magnolia \
--to=djwong@kernel.org \
--cc=david@fromorbit.com \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).