From: "Darrick J. Wong" <djwong@kernel.org>
To: Dave Chinner <david@fromorbit.com>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH 08/16] xfs: convert remaining mount flags to state flags
Date: Wed, 14 Jul 2021 16:10:19 -0700 [thread overview]
Message-ID: <20210714231019.GB22402@magnolia> (raw)
In-Reply-To: <20210714041912.2625692-9-david@fromorbit.com>
On Wed, Jul 14, 2021 at 02:19:04PM +1000, Dave Chinner wrote:
> From: Dave Chinner <dchinner@redhat.com>
>
> The remaining mount flags kept in m_flags are actually runtime state
> flags. These change dynamically, so they really should be updated
> atomically so we don't potentially lose an update dur to racing
s/dur/due/ ?
> modifications.
>
> Rename m_flags to m_state, and convert it to use atomic bitops to
> set and clear the flags. This also adds a couple of simple wrappers
> for common state checks - read only and shutdown.
>
> Signed-off-by: Dave Chinner <dchinner@redhat.com>
With that corrected, this is a neat cleanup. :)
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
--D
> ---
> fs/xfs/libxfs/xfs_alloc.c | 2 +-
> fs/xfs/libxfs/xfs_sb.c | 2 +-
> fs/xfs/scrub/scrub.c | 2 +-
> fs/xfs/xfs_buf.c | 2 +-
> fs/xfs/xfs_export.c | 4 ++--
> fs/xfs/xfs_filestream.c | 2 +-
> fs/xfs/xfs_fsops.c | 7 +------
> fs/xfs/xfs_icache.c | 2 +-
> fs/xfs/xfs_inode.c | 4 ++--
> fs/xfs/xfs_ioctl.c | 6 +++---
> fs/xfs/xfs_iops.c | 2 +-
> fs/xfs/xfs_log.c | 31 +++++++++++++++++--------------
> fs/xfs/xfs_log_recover.c | 2 +-
> fs/xfs/xfs_mount.c | 15 +++++++--------
> fs/xfs/xfs_mount.h | 36 +++++++++++++++++++++---------------
> fs/xfs/xfs_super.c | 28 +++++++++++++---------------
> 16 files changed, 74 insertions(+), 73 deletions(-)
>
> diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c
> index 5f943a804d9e..f408ea68dbd0 100644
> --- a/fs/xfs/libxfs/xfs_alloc.c
> +++ b/fs/xfs/libxfs/xfs_alloc.c
> @@ -3166,7 +3166,7 @@ xfs_alloc_vextent(
> * the first a.g. fails.
> */
> if ((args->datatype & XFS_ALLOC_INITIAL_USER_DATA) &&
> - (mp->m_flags & XFS_MOUNT_32BITINODES)) {
> + xfs_is_inode32(mp)) {
> args->fsbno = XFS_AGB_TO_FSB(mp,
> ((mp->m_agfrotor / rotorstep) %
> mp->m_sb.sb_agcount), 0);
> diff --git a/fs/xfs/libxfs/xfs_sb.c b/fs/xfs/libxfs/xfs_sb.c
> index a1e286fb8ac3..baaec7e6a975 100644
> --- a/fs/xfs/libxfs/xfs_sb.c
> +++ b/fs/xfs/libxfs/xfs_sb.c
> @@ -122,7 +122,7 @@ xfs_validate_sb_read(
> "Superblock has unknown read-only compatible features (0x%x) enabled.",
> (sbp->sb_features_ro_compat &
> XFS_SB_FEAT_RO_COMPAT_UNKNOWN));
> - if (!(mp->m_flags & XFS_MOUNT_RDONLY)) {
> + if (!xfs_is_readonly(mp)) {
> xfs_warn(mp,
> "Attempted to mount read-only compatible filesystem read-write.");
> xfs_warn(mp,
> diff --git a/fs/xfs/scrub/scrub.c b/fs/xfs/scrub/scrub.c
> index d9534fe0c69b..96c623c464f0 100644
> --- a/fs/xfs/scrub/scrub.c
> +++ b/fs/xfs/scrub/scrub.c
> @@ -419,7 +419,7 @@ xchk_validate_inputs(
> goto out;
>
> error = -EROFS;
> - if (mp->m_flags & XFS_MOUNT_RDONLY)
> + if (xfs_is_readonly(mp))
> goto out;
> }
>
> diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
> index f606d4839e6e..49ae68086945 100644
> --- a/fs/xfs/xfs_buf.c
> +++ b/fs/xfs/xfs_buf.c
> @@ -1145,7 +1145,7 @@ xfs_buf_ioerror_permanent(
> return true;
>
> /* At unmount we may treat errors differently */
> - if ((mp->m_flags & XFS_MOUNT_UNMOUNTING) && mp->m_fail_unmount)
> + if (xfs_is_unmounting(mp) && mp->m_fail_unmount)
> return true;
>
> return false;
> diff --git a/fs/xfs/xfs_export.c b/fs/xfs/xfs_export.c
> index cb359ec3389b..1064c2342876 100644
> --- a/fs/xfs/xfs_export.c
> +++ b/fs/xfs/xfs_export.c
> @@ -44,6 +44,7 @@ xfs_fs_encode_fh(
> int *max_len,
> struct inode *parent)
> {
> + struct xfs_mount *mp = XFS_M(inode->i_sb);
> struct fid *fid = (struct fid *)fh;
> struct xfs_fid64 *fid64 = (struct xfs_fid64 *)fh;
> int fileid_type;
> @@ -63,8 +64,7 @@ xfs_fs_encode_fh(
> * large enough filesystem may contain them, thus the slightly
> * confusing looking conditional below.
> */
> - if (!xfs_has_small_inums(XFS_M(inode->i_sb)) ||
> - (XFS_M(inode->i_sb)->m_flags & XFS_MOUNT_32BITINODES))
> + if (!xfs_has_small_inums(mp) || xfs_is_inode32(mp))
> fileid_type |= XFS_FILEID_TYPE_64FLAG;
>
> /*
> diff --git a/fs/xfs/xfs_filestream.c b/fs/xfs/xfs_filestream.c
> index eed6ca5f8f91..6a3ce0f6dc9e 100644
> --- a/fs/xfs/xfs_filestream.c
> +++ b/fs/xfs/xfs_filestream.c
> @@ -295,7 +295,7 @@ xfs_filestream_lookup_ag(
> * Set the starting AG using the rotor for inode32, otherwise
> * use the directory inode's AG.
> */
> - if (mp->m_flags & XFS_MOUNT_32BITINODES) {
> + if (xfs_is_inode32(mp)) {
> xfs_agnumber_t rotorstep = xfs_rotorstep;
> startag = (mp->m_agfrotor / rotorstep) % mp->m_sb.sb_agcount;
> mp->m_agfrotor = (mp->m_agfrotor + 1) %
> diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c
> index cbdb9a86edfc..38f714990756 100644
> --- a/fs/xfs/xfs_fsops.c
> +++ b/fs/xfs/xfs_fsops.c
> @@ -527,15 +527,10 @@ xfs_do_force_shutdown(
> int tag;
> const char *why;
>
> - spin_lock(&mp->m_sb_lock);
> - if (XFS_FORCED_SHUTDOWN(mp)) {
> - spin_unlock(&mp->m_sb_lock);
> + if (test_and_set_bit(XFS_STATE_SHUTDOWN, &mp->m_opstate))
> return;
> - }
> - mp->m_flags |= XFS_MOUNT_FS_SHUTDOWN;
> if (mp->m_sb_bp)
> mp->m_sb_bp->b_flags |= XBF_DONE;
> - spin_unlock(&mp->m_sb_lock);
>
> if (flags & SHUTDOWN_FORCE_UMOUNT)
> xfs_alert(mp, "User initiated shutdown received.");
> diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c
> index 81da0a59a106..8e65cd47a061 100644
> --- a/fs/xfs/xfs_icache.c
> +++ b/fs/xfs/xfs_icache.c
> @@ -1052,7 +1052,7 @@ static inline bool
> xfs_want_reclaim_sick(
> struct xfs_mount *mp)
> {
> - return (mp->m_flags & XFS_MOUNT_UNMOUNTING) || xfs_has_norecovery(mp) ||
> + return xfs_is_unmounting(mp) || xfs_has_norecovery(mp) ||
> XFS_FORCED_SHUTDOWN(mp);
> }
>
> diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
> index 59cea74df9a7..09b4aba8edc5 100644
> --- a/fs/xfs/xfs_inode.c
> +++ b/fs/xfs/xfs_inode.c
> @@ -1434,7 +1434,7 @@ xfs_release(
> return 0;
>
> /* If this is a read-only mount, don't do this (would generate I/O) */
> - if (mp->m_flags & XFS_MOUNT_RDONLY)
> + if (xfs_is_readonly(mp))
> return 0;
>
> if (!XFS_FORCED_SHUTDOWN(mp)) {
> @@ -1682,7 +1682,7 @@ xfs_inactive(
> ASSERT(!xfs_iflags_test(ip, XFS_IRECOVERY));
>
> /* If this is a read-only mount, don't do this (would generate I/O) */
> - if (mp->m_flags & XFS_MOUNT_RDONLY)
> + if (xfs_is_readonly(mp))
> goto out;
>
> /* Metadata inodes require explicit resource cleanup. */
> diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
> index 1c7f01cdba71..d9c2aaad2a4f 100644
> --- a/fs/xfs/xfs_ioctl.c
> +++ b/fs/xfs/xfs_ioctl.c
> @@ -1245,7 +1245,7 @@ xfs_ioctl_setattr_get_trans(
> struct xfs_trans *tp;
> int error = -EROFS;
>
> - if (mp->m_flags & XFS_MOUNT_RDONLY)
> + if (xfs_is_readonly(mp))
> goto out_error;
> error = -EIO;
> if (XFS_FORCED_SHUTDOWN(mp))
> @@ -2063,7 +2063,7 @@ xfs_file_ioctl(
> if (!capable(CAP_SYS_ADMIN))
> return -EPERM;
>
> - if (mp->m_flags & XFS_MOUNT_RDONLY)
> + if (xfs_is_readonly(mp))
> return -EROFS;
>
> if (copy_from_user(&inout, arg, sizeof(inout)))
> @@ -2180,7 +2180,7 @@ xfs_file_ioctl(
> if (!capable(CAP_SYS_ADMIN))
> return -EPERM;
>
> - if (mp->m_flags & XFS_MOUNT_RDONLY)
> + if (xfs_is_readonly(mp))
> return -EROFS;
>
> if (copy_from_user(&eofb, arg, sizeof(eofb)))
> diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c
> index 2208345546c1..6e37d89cdf02 100644
> --- a/fs/xfs/xfs_iops.c
> +++ b/fs/xfs/xfs_iops.c
> @@ -673,7 +673,7 @@ xfs_vn_change_ok(
> {
> struct xfs_mount *mp = XFS_I(d_inode(dentry))->i_mount;
>
> - if (mp->m_flags & XFS_MOUNT_RDONLY)
> + if (xfs_is_readonly(mp))
> return -EROFS;
>
> if (XFS_FORCED_SHUTDOWN(mp))
> diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c
> index ac18fe03a630..574cb5f84600 100644
> --- a/fs/xfs/xfs_log.c
> +++ b/fs/xfs/xfs_log.c
> @@ -621,7 +621,7 @@ xfs_log_mount(
> xfs_notice(mp,
> "Mounting V%d filesystem in no-recovery mode. Filesystem will be inconsistent.",
> XFS_SB_VERSION_NUM(&mp->m_sb));
> - ASSERT(mp->m_flags & XFS_MOUNT_RDONLY);
> + ASSERT(xfs_is_readonly(mp));
> }
>
> log = xlog_alloc_log(mp, log_target, blk_offset, num_bblks);
> @@ -701,15 +701,15 @@ xfs_log_mount(
> * just worked.
> */
> if (!xfs_has_norecovery(mp)) {
> - bool readonly = (mp->m_flags & XFS_MOUNT_RDONLY);
> -
> - if (readonly)
> - mp->m_flags &= ~XFS_MOUNT_RDONLY;
> -
> + /*
> + * log recovery ignores readonly state and so we need to clear
> + * mount-based read only state so it can write to disk.
> + */
> + bool readonly = test_and_clear_bit(XFS_STATE_READONLY,
> + &mp->m_opstate);
> error = xlog_recover(log);
> -
> if (readonly)
> - mp->m_flags |= XFS_MOUNT_RDONLY;
> + set_bit(XFS_STATE_READONLY, &mp->m_opstate);
> if (error) {
> xfs_warn(mp, "log mount/recovery failed: error %d",
> error);
> @@ -758,17 +758,20 @@ xfs_log_mount_finish(
> struct xfs_mount *mp)
> {
> struct xlog *log = mp->m_log;
> - bool readonly = (mp->m_flags & XFS_MOUNT_RDONLY);
> + bool readonly;
> int error = 0;
>
> if (xfs_has_norecovery(mp)) {
> - ASSERT(readonly);
> + ASSERT(xfs_is_readonly(mp));
> return 0;
> - } else if (readonly) {
> - /* Allow unlinked processing to proceed */
> - mp->m_flags &= ~XFS_MOUNT_RDONLY;
> }
>
> + /*
> + * log recovery ignores readonly state and so we need to clear
> + * mount-based read only state so it can write to disk.
> + */
> + readonly = test_and_clear_bit(XFS_STATE_READONLY, &mp->m_opstate);
> +
> /*
> * During the second phase of log recovery, we need iget and
> * iput to behave like they do for an active filesystem.
> @@ -820,7 +823,7 @@ xfs_log_mount_finish(
>
> clear_bit(XLOG_RECOVERY_NEEDED, &log->l_opstate);
> if (readonly)
> - mp->m_flags |= XFS_MOUNT_RDONLY;
> + set_bit(XFS_STATE_READONLY, &mp->m_opstate);
>
> /* Make sure the log is dead if we're returning failure. */
> ASSERT(!error || xlog_is_shutdown(log));
> diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c
> index accc175987a4..ffa445d24ba4 100644
> --- a/fs/xfs/xfs_log_recover.c
> +++ b/fs/xfs/xfs_log_recover.c
> @@ -1347,7 +1347,7 @@ xlog_find_tail(
> * headers if we have a filesystem using non-persistent counters.
> */
> if (clean)
> - log->l_mp->m_flags |= XFS_MOUNT_WAS_CLEAN;
> + set_bit(XFS_STATE_CLEAN, &log->l_mp->m_opstate);
>
> /*
> * Make sure that there are no blocks in front of the head
> diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c
> index 0750b2a0a6c5..feb10fa7029a 100644
> --- a/fs/xfs/xfs_mount.c
> +++ b/fs/xfs/xfs_mount.c
> @@ -485,7 +485,7 @@ xfs_check_summary_counts(
> * counters. If any of them are obviously incorrect, we can recompute
> * them from the AGF headers in the next step.
> */
> - if (XFS_LAST_UNMOUNT_WAS_CLEAN(mp) &&
> + if (xfs_is_clean(mp) &&
> (mp->m_sb.sb_fdblocks > mp->m_sb.sb_dblocks ||
> !xfs_verify_icount(mp, mp->m_sb.sb_icount) ||
> mp->m_sb.sb_ifree > mp->m_sb.sb_icount))
> @@ -502,8 +502,7 @@ xfs_check_summary_counts(
> * superblock to be correct and we don't need to do anything here.
> * Otherwise, recalculate the summary counters.
> */
> - if ((!xfs_has_lazysbcount(mp) ||
> - XFS_LAST_UNMOUNT_WAS_CLEAN(mp)) &&
> + if ((!xfs_has_lazysbcount(mp) || xfs_is_clean(mp)) &&
> !xfs_fs_has_sickness(mp, XFS_SICK_FS_COUNTERS))
> return 0;
>
> @@ -543,7 +542,7 @@ xfs_unmount_flush_inodes(
> xfs_extent_busy_wait_all(mp);
> flush_workqueue(xfs_discard_wq);
>
> - mp->m_flags |= XFS_MOUNT_UNMOUNTING;
> + set_bit(XFS_STATE_UNMOUNTING, &mp->m_opstate);
>
> xfs_ail_push_all_sync(mp->m_ail);
> cancel_delayed_work_sync(&mp->m_reclaim_work);
> @@ -822,7 +821,7 @@ xfs_mountfs(
> * the next remount into writeable mode. Otherwise we would never
> * perform the update e.g. for the root filesystem.
> */
> - if (mp->m_update_sb && !(mp->m_flags & XFS_MOUNT_RDONLY)) {
> + if (mp->m_update_sb && !xfs_is_readonly(mp)) {
> error = xfs_sync_sb(mp, false);
> if (error) {
> xfs_warn(mp, "failed to write sb changes");
> @@ -881,7 +880,7 @@ 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_has_norecovery(mp))
> + if (xfs_is_readonly(mp) && !xfs_has_norecovery(mp))
> xfs_log_clean(mp);
>
> /*
> @@ -905,7 +904,7 @@ xfs_mountfs(
> * This may drive us straight to ENOSPC on mount, but that implies
> * we were already there on the last unmount. Warn if this occurs.
> */
> - if (!(mp->m_flags & XFS_MOUNT_RDONLY)) {
> + if (!xfs_is_readonly(mp)) {
> resblks = xfs_default_resblks(mp);
> error = xfs_reserve_blocks(mp, &resblks, NULL);
> if (error)
> @@ -1044,7 +1043,7 @@ xfs_fs_writable(
> {
> ASSERT(level > SB_UNFROZEN);
> if ((mp->m_super->s_writers.frozen >= level) ||
> - XFS_FORCED_SHUTDOWN(mp) || (mp->m_flags & XFS_MOUNT_RDONLY))
> + XFS_FORCED_SHUTDOWN(mp) || xfs_is_readonly(mp))
> return false;
>
> return true;
> diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h
> index 387be1bfb431..0b9b84b31179 100644
> --- a/fs/xfs/xfs_mount.h
> +++ b/fs/xfs/xfs_mount.h
> @@ -131,12 +131,12 @@ typedef struct xfs_mount {
> uint m_rsumsize; /* size of rt summary, bytes */
> int m_fixedfsid[2]; /* unchanged for life of FS */
> uint m_qflags; /* quota status flags */
> - uint64_t m_flags; /* global mount flags */
> uint64_t m_features; /* active filesystem features */
> int64_t m_low_space[XFS_LOWSP_MAX];
> struct xfs_ino_geometry m_ino_geo; /* inode geometry */
> struct xfs_trans_resv m_resv; /* precomputed res values */
> /* low free space thresholds */
> + unsigned long m_opstate; /* dynamic state flags */
> bool m_always_cow;
> bool m_fail_unmount;
> bool m_finobt_nores; /* no per-AG finobt resv. */
> @@ -345,18 +345,26 @@ __XFS_HAS_FEAT(norecovery, NORECOVERY)
> __XFS_HAS_FEAT(nouuid, NOUUID)
>
> /*
> - * Flags for m_flags.
> + * Operational state flags
> + * Use these with atomic bit ops only!
> */
> -#define XFS_MOUNT_WSYNC (1ULL << 0) /* for nfs - all metadata ops
> - must be synchronous except
> - for space allocations */
> -#define XFS_MOUNT_UNMOUNTING (1ULL << 1) /* filesystem is unmounting */
> -#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_32BITINODES (1ULL << 15) /* inode32 allocator active */
> -#define XFS_MOUNT_RDONLY (1ULL << 4) /* read-only fs */
> +#define XFS_STATE_UNMOUNTING 0 /* filesystem is unmounting */
> +#define XFS_STATE_CLEAN 1 /* mount was clean */
> +#define XFS_STATE_SHUTDOWN 2 /* atomic stop of all fs operations */
> +#define XFS_STATE_INODE32 3 /* inode32 allocator active */
> +#define XFS_STATE_READONLY 4 /* read-only fs */
> +
> +#define __XFS_IS_STATE(name, NAME) \
> +static inline bool xfs_is_ ## name (struct xfs_mount *mp) \
> +{ \
> + return test_bit(XFS_STATE_ ## NAME, &mp->m_opstate); \
> +}
> +
> +__XFS_IS_STATE(unmounting, UNMOUNTING)
> +__XFS_IS_STATE(clean, CLEAN)
> +__XFS_IS_STATE(shutdown, SHUTDOWN)
> +__XFS_IS_STATE(inode32, INODE32)
> +__XFS_IS_STATE(readonly, READONLY)
>
> /*
> * Max and min values for mount-option defined I/O
> @@ -365,9 +373,7 @@ __XFS_HAS_FEAT(nouuid, NOUUID)
> #define XFS_MAX_IO_LOG 30 /* 1G */
> #define XFS_MIN_IO_LOG PAGE_SHIFT
>
> -#define XFS_LAST_UNMOUNT_WAS_CLEAN(mp) \
> - ((mp)->m_flags & XFS_MOUNT_WAS_CLEAN)
> -#define XFS_FORCED_SHUTDOWN(mp) ((mp)->m_flags & XFS_MOUNT_FS_SHUTDOWN)
> +#define XFS_FORCED_SHUTDOWN(mp) xfs_is_shutdown(mp)
> void xfs_do_force_shutdown(struct xfs_mount *mp, int flags, char *fname,
> int lnnum);
> #define xfs_force_shutdown(m,f) \
> diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
> index 9c3fc7f5e5ab..cc7eb9a73e85 100644
> --- a/fs/xfs/xfs_super.c
> +++ b/fs/xfs/xfs_super.c
> @@ -233,7 +233,7 @@ xfs_fs_show_options(
> *
> * Inode allocation patterns are altered only if inode32 is requested
> * (XFS_FEAT_SMALL_INUMS), and the filesystem is sufficiently large.
> - * If altered, XFS_MOUNT_32BITINODES is set as well.
> + * If altered, XFS_STATE_INODE32 is set as well.
> *
> * An agcount independent of that in the mount structure is provided
> * because in the growfs case, mp->m_sb.sb_agcount is not yet updated
> @@ -275,13 +275,13 @@ xfs_set_inode_alloc(
>
> /*
> * If user asked for no more than 32-bit inodes, and the fs is
> - * sufficiently large, set XFS_MOUNT_32BITINODES if we must alter
> + * sufficiently large, set XFS_STATE_INODE32 if we must alter
> * the allocator to accommodate the request.
> */
> if (xfs_has_small_inums(mp) && ino > XFS_MAXINUMBER_32)
> - mp->m_flags |= XFS_MOUNT_32BITINODES;
> + set_bit(XFS_STATE_INODE32, &mp->m_opstate);
> else
> - mp->m_flags &= ~XFS_MOUNT_32BITINODES;
> + clear_bit(XFS_STATE_INODE32, &mp->m_opstate);
>
> for (index = 0; index < agcount; index++) {
> struct xfs_perag *pag;
> @@ -290,7 +290,7 @@ xfs_set_inode_alloc(
>
> pag = xfs_perag_get(mp, index);
>
> - if (mp->m_flags & XFS_MOUNT_32BITINODES) {
> + if (xfs_is_inode32(mp)) {
> if (ino > XFS_MAXINUMBER_32) {
> pag->pagi_inodeok = 0;
> pag->pagf_metadata = 0;
> @@ -310,7 +310,7 @@ xfs_set_inode_alloc(
> xfs_perag_put(pag);
> }
>
> - return (mp->m_flags & XFS_MOUNT_32BITINODES) ? maxagi : agcount;
> + return xfs_is_inode32(mp) ? maxagi : agcount;
> }
>
> STATIC int
> @@ -912,8 +912,6 @@ STATIC int
> xfs_finish_flags(
> struct xfs_mount *mp)
> {
> - int ronly = (mp->m_flags & XFS_MOUNT_RDONLY);
> -
> /* Fail a mount where the logbuf is smaller than the log stripe */
> if (xfs_has_logv2(mp)) {
> if (mp->m_logbsize <= 0 &&
> @@ -946,7 +944,7 @@ xfs_finish_flags(
> /*
> * prohibit r/w mounts of read-only filesystems
> */
> - if ((mp->m_sb.sb_flags & XFS_SBF_READONLY) && !ronly) {
> + if ((mp->m_sb.sb_flags & XFS_SBF_READONLY) && !xfs_is_readonly(mp)) {
> xfs_warn(mp,
> "cannot mount a read-only filesystem as read-write");
> return -EROFS;
> @@ -1293,7 +1291,7 @@ xfs_fs_validate_params(
> struct xfs_mount *mp)
> {
> /* No recovery flag requires a read-only mount */
> - if (xfs_has_norecovery(mp) && !(mp->m_flags & XFS_MOUNT_RDONLY)) {
> + if (xfs_has_norecovery(mp) && !xfs_is_readonly(mp)) {
> xfs_warn(mp, "no-recovery mounts must be read-only.");
> return -EINVAL;
> }
> @@ -1666,7 +1664,7 @@ xfs_remount_rw(
> return -EINVAL;
> }
>
> - mp->m_flags &= ~XFS_MOUNT_RDONLY;
> + clear_bit(XFS_STATE_READONLY, &mp->m_opstate);
>
> /*
> * If this is the first remount to writeable state we might have some
> @@ -1742,7 +1740,7 @@ xfs_remount_ro(
> xfs_save_resvblks(mp);
>
> xfs_log_clean(mp);
> - mp->m_flags |= XFS_MOUNT_RDONLY;
> + set_bit(XFS_STATE_READONLY, &mp->m_opstate);
>
> return 0;
> }
> @@ -1792,14 +1790,14 @@ xfs_fs_reconfigure(
> }
>
> /* ro -> rw */
> - if ((mp->m_flags & XFS_MOUNT_RDONLY) && !(flags & SB_RDONLY)) {
> + if (xfs_is_readonly(mp) && !(flags & SB_RDONLY)) {
> error = xfs_remount_rw(mp);
> if (error)
> return error;
> }
>
> /* rw -> ro */
> - if (!(mp->m_flags & XFS_MOUNT_RDONLY) && (flags & SB_RDONLY)) {
> + if (!xfs_is_readonly(mp) && (flags & SB_RDONLY)) {
> error = xfs_remount_ro(mp);
> if (error)
> return error;
> @@ -1866,7 +1864,7 @@ static int xfs_init_fs_context(
> * Copy binary VFS mount flags we are interested in.
> */
> if (fc->sb_flags & SB_RDONLY)
> - mp->m_flags |= XFS_MOUNT_RDONLY;
> + set_bit(XFS_STATE_READONLY, &mp->m_opstate);
> if (fc->sb_flags & SB_DIRSYNC)
> mp->m_features |= XFS_FEAT_DIRSYNC;
> if (fc->sb_flags & SB_SYNCHRONOUS)
> --
> 2.31.1
>
next prev parent reply other threads:[~2021-07-14 23:10 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-14 4:18 [PATCH 00/16] xfs: rework feature flags Dave Chinner
2021-07-14 4:18 ` [PATCH 01/16] xfs: sb verifier doesn't handle uncached sb buffer Dave Chinner
2021-07-14 6:43 ` Christoph Hellwig
2021-07-14 9:37 ` Dave Chinner
2021-07-14 22:44 ` Darrick J. Wong
2021-07-14 23:00 ` Dave Chinner
2021-07-14 23:03 ` Darrick J. Wong
2021-07-14 4:18 ` [PATCH 02/16] xfs: rename xfs_has_attr() Dave Chinner
2021-07-14 6:49 ` Christoph Hellwig
2021-07-14 22:46 ` Darrick J. Wong
2021-07-14 4:18 ` [PATCH 03/16] xfs: rework attr2 feature and mount options Dave Chinner
2021-07-14 6:58 ` Christoph Hellwig
2021-07-14 9:45 ` Dave Chinner
2021-07-15 5:55 ` Christoph Hellwig
2021-07-15 23:47 ` Dave Chinner
2021-07-16 9:43 ` Christoph Hellwig
2021-07-14 22:51 ` Darrick J. Wong
2021-07-14 4:19 ` [PATCH 04/16] xfs: reflect sb features in xfs_mount Dave Chinner
2021-07-14 7:01 ` Christoph Hellwig
2021-07-14 22:56 ` Darrick J. Wong
2021-07-14 23:07 ` Dave Chinner
2021-07-14 23:17 ` Darrick J. Wong
2021-07-14 4:19 ` [PATCH 05/16] xfs: replace xfs_sb_version checks with feature flag checks Dave Chinner
2021-07-14 7:03 ` Christoph Hellwig
2021-07-14 22:57 ` Darrick J. Wong
2021-07-14 4:19 ` [PATCH 06/16] xfs: consolidate mount option features in m_features Dave Chinner
2021-07-14 7:05 ` Christoph Hellwig
2021-07-14 9:55 ` Dave Chinner
2021-07-15 5:59 ` Christoph Hellwig
2021-07-15 23:43 ` Dave Chinner
2021-07-14 23:02 ` Darrick J. Wong
2021-07-14 4:19 ` [PATCH 07/16] xfs: convert mount flags to features Dave Chinner
2021-07-14 23:07 ` Darrick J. Wong
2021-07-14 4:19 ` [PATCH 08/16] xfs: convert remaining mount flags to state flags Dave Chinner
2021-07-14 23:10 ` Darrick J. Wong [this message]
2021-07-14 4:19 ` [PATCH 09/16] xfs: replace XFS_FORCED_SHUTDOWN with xfs_is_shutdown Dave Chinner
2021-07-14 23:11 ` Darrick J. Wong
2021-07-14 4:19 ` [PATCH 10/16] xfs: convert xfs_fs_geometry to use mount feature checks Dave Chinner
2021-07-14 7:11 ` Christoph Hellwig
2021-07-14 23:15 ` Darrick J. Wong
2021-07-14 23:35 ` Dave Chinner
2021-07-14 23:38 ` Darrick J. Wong
2021-07-14 4:19 ` [PATCH 11/16] xfs: open code sb verifier " Dave Chinner
2021-07-14 7:19 ` Christoph Hellwig
2021-07-16 0:26 ` Darrick J. Wong
2021-07-14 4:19 ` [PATCH 12/16] xfs: convert scrub to use mount-based " Dave Chinner
2021-07-14 23:18 ` Darrick J. Wong
2021-07-14 4:19 ` [PATCH 13/16] xfs: convert xfs_sb_version_has checks to use mount features Dave Chinner
2021-07-14 23:19 ` Darrick J. Wong
2021-07-14 4:19 ` [PATCH 14/16] xfs: remove unused xfs_sb_version_has wrappers Dave Chinner
2021-07-14 23:21 ` Darrick J. Wong
2021-07-14 4:19 ` [PATCH 15/16] xfs: introduce xfs_sb_is_v5 helper Dave Chinner
2021-07-14 23:24 ` Darrick J. Wong
2021-07-14 4:19 ` [PATCH 16/16] xfs: kill xfs_sb_version_has_v3inode() Dave Chinner
2021-07-14 23:24 ` Darrick J. Wong
-- 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 08/16] xfs: convert remaining mount flags to state flags Dave Chinner
2021-08-18 23:59 [PATCH 00/16 v3] xfs: rework feature flags Dave Chinner
2021-08-18 23:59 ` [PATCH 08/16] xfs: convert remaining mount flags to state flags Dave Chinner
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=20210714231019.GB22402@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