All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <djwong@kernel.org>
To: sandeen@sandeen.net, djwong@kernel.org
Cc: Dave Chinner <dchinner@redhat.com>, linux-xfs@vger.kernel.org
Subject: [PATCH 27/45] xfs: convert remaining mount flags to state flags
Date: Wed, 19 Jan 2022 16:19:51 -0800	[thread overview]
Message-ID: <164263799158.860211.16914496965938971659.stgit@magnolia> (raw)
In-Reply-To: <164263784199.860211.7509808171577819673.stgit@magnolia>

From: Dave Chinner <dchinner@redhat.com>

Source kernel commit: 2e973b2cd4cdb993be94cca4c33f532f1ed05316

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 due to racing
modifications.

Convert these remaining flags to be stored in m_opstate and 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>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
 include/xfs_mount.h |   34 ++++++++++++++++++++++++++++++++++
 libxfs/init.c       |   12 ++++++++----
 libxfs/xfs_alloc.c  |    2 +-
 libxfs/xfs_sb.c     |    2 +-
 4 files changed, 44 insertions(+), 6 deletions(-)


diff --git a/include/xfs_mount.h b/include/xfs_mount.h
index d4b4ccdc..97a1a808 100644
--- a/include/xfs_mount.h
+++ b/include/xfs_mount.h
@@ -81,6 +81,7 @@ typedef struct xfs_mount {
 	struct radix_tree_root	m_perag_tree;
 	uint			m_flags;	/* global mount flags */
 	uint64_t		m_features;	/* active filesystem features */
+	unsigned long		m_opstate;	/* dynamic state flags */
 	bool			m_finobt_nores; /* no per-AG finobt resv. */
 	uint			m_qflags;	/* quota status flags */
 	uint			m_attroffset;	/* inode attribute offset */
@@ -207,6 +208,39 @@ __XFS_UNSUPP_FEAT(wsync)
 __XFS_UNSUPP_FEAT(noattr2)
 __XFS_UNSUPP_FEAT(ikeep)
 __XFS_UNSUPP_FEAT(swalloc)
+__XFS_UNSUPP_FEAT(readonly)
+
+/* Operational mount state flags */
+#define XFS_OPSTATE_INODE32		0	/* inode32 allocator active */
+
+#define __XFS_IS_OPSTATE(name, NAME) \
+static inline bool xfs_is_ ## name (struct xfs_mount *mp) \
+{ \
+	return (mp)->m_opstate & (1UL << XFS_OPSTATE_ ## NAME); \
+} \
+static inline bool xfs_clear_ ## name (struct xfs_mount *mp) \
+{ \
+	bool	ret = xfs_is_ ## name(mp); \
+\
+	(mp)->m_opstate &= ~(1UL << XFS_OPSTATE_ ## NAME); \
+	return ret; \
+} \
+static inline bool xfs_set_ ## name (struct xfs_mount *mp) \
+{ \
+	bool	ret = xfs_is_ ## name(mp); \
+\
+	(mp)->m_opstate |= (1UL << XFS_OPSTATE_ ## NAME); \
+	return ret; \
+}
+
+__XFS_IS_OPSTATE(inode32, INODE32)
+
+#define __XFS_UNSUPP_OPSTATE(name) \
+static inline bool xfs_is_ ## name (struct xfs_mount *mp) \
+{ \
+	return false; \
+}
+__XFS_UNSUPP_OPSTATE(readonly)
 
 #define LIBXFS_MOUNT_DEBUGGER		0x0001
 #define LIBXFS_MOUNT_32BITINODES	0x0002
diff --git a/libxfs/init.c b/libxfs/init.c
index 7d94b721..adee90d5 100644
--- a/libxfs/init.c
+++ b/libxfs/init.c
@@ -540,10 +540,13 @@ 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 ((mp->m_flags & XFS_MOUNT_SMALL_INUMS) && ino > XFS_MAXINUMBER_32) {
+		xfs_set_inode32(mp);
 		mp->m_flags |= XFS_MOUNT_32BITINODES;
-	else
+	} else {
+		xfs_clear_inode32(mp);
 		mp->m_flags &= ~XFS_MOUNT_32BITINODES;
+	}
 
 	for (index = 0; index < agcount; index++) {
 		struct xfs_perag	*pag;
@@ -552,7 +555,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;
@@ -572,7 +575,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 struct xfs_buftarg *
@@ -728,6 +731,7 @@ libxfs_mount(
 
 	mp->m_finobt_nores = true;
 	mp->m_flags = (LIBXFS_MOUNT_32BITINODES|LIBXFS_MOUNT_32BITINOOPT);
+	xfs_set_inode32(mp);
 	mp->m_sb = *sb;
 	INIT_RADIX_TREE(&mp->m_perag_tree, GFP_KERNEL);
 	sbp = &mp->m_sb;
diff --git a/libxfs/xfs_alloc.c b/libxfs/xfs_alloc.c
index b8725339..163c726f 100644
--- a/libxfs/xfs_alloc.c
+++ b/libxfs/xfs_alloc.c
@@ -3162,7 +3162,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/libxfs/xfs_sb.c b/libxfs/xfs_sb.c
index 25a4ffdb..d2de96d1 100644
--- a/libxfs/xfs_sb.c
+++ b/libxfs/xfs_sb.c
@@ -120,7 +120,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,


  parent reply	other threads:[~2022-01-20  0:19 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-20  0:17 [PATCHSET 00/45] xfsprogs: sync libxfs with 5.15 Darrick J. Wong
2022-01-20  0:17 ` [PATCH 01/45] xfsprogs: fix static build problems caused by liburcu Darrick J. Wong
2022-01-20  0:17 ` [PATCH 02/45] xfs_{copy,db,logprint,repair}: pass xfs_mount pointers instead of xfs_sb pointers Darrick J. Wong
2022-01-28 22:01   ` Eric Sandeen
2022-01-20  0:17 ` [PATCH 03/45] xfs: remove support for disabling quota accounting on a mounted file system Darrick J. Wong
2022-01-20  0:17 ` [PATCH 04/45] xfs: remove the active vs running quota differentiation Darrick J. Wong
2022-01-20  0:17 ` [PATCH 05/45] xfs: replace kmem_alloc_large() with kvmalloc() Darrick J. Wong
2022-01-20  0:17 ` [PATCH 06/45] xfs: allow setting and clearing of log incompat feature flags Darrick J. Wong
2022-01-20  0:18 ` [PATCH 07/45] xfs: add attr state machine tracepoints Darrick J. Wong
2022-01-20  0:18 ` [PATCH 08/45] xfs: Rename __xfs_attr_rmtval_remove Darrick J. Wong
2022-01-20  0:18 ` [PATCH 09/45] xfs: make xfs_rtalloc_query_range input parameters const Darrick J. Wong
2022-01-20  0:18 ` [PATCH 10/45] xfs: make the key parameters to all btree key comparison functions const Darrick J. Wong
2022-01-20  0:18 ` [PATCH 11/45] xfs: make the key parameters to all btree query range " Darrick J. Wong
2022-01-20  0:18 ` [PATCH 12/45] xfs: make the record pointer passed to query_range " Darrick J. Wong
2022-01-20  0:18 ` [PATCH 13/45] xfs: mark the record passed into btree init_key functions as const Darrick J. Wong
2022-01-20  0:18 ` [PATCH 14/45] xfs: make the keys and records passed to btree inorder functions const Darrick J. Wong
2022-01-20  0:18 ` [PATCH 15/45] xfs: mark the record passed into xchk_btree functions as const Darrick J. Wong
2022-01-20  0:18 ` [PATCH 16/45] xfs: make the pointer passed to btree set_root functions const Darrick J. Wong
2022-01-20  0:18 ` [PATCH 17/45] xfs: make the start pointer passed to btree alloc_block " Darrick J. Wong
2022-01-20  0:19 ` [PATCH 18/45] xfs: make the start pointer passed to btree update_lastrec " Darrick J. Wong
2022-01-20  0:19 ` [PATCH 19/45] xfs: constify btree function parameters that are not modified Darrick J. Wong
2022-01-20  0:19 ` [PATCH 20/45] xfs: resolve fork names in trace output Darrick J. Wong
2022-01-20  0:19 ` [PATCH 21/45] xfs: sb verifier doesn't handle uncached sb buffer Darrick J. Wong
2022-01-20  0:19 ` [PATCH 22/45] xfs: rename xfs_has_attr() Darrick J. Wong
2022-01-20  0:19 ` [PATCH 23/45] xfs: rework attr2 feature and mount options Darrick J. Wong
2022-01-20  0:19 ` [PATCH 24/45] xfs: reflect sb features in xfs_mount Darrick J. Wong
2022-01-20  0:19 ` [PATCH 25/45] xfs: replace xfs_sb_version checks with feature flag checks Darrick J. Wong
2022-01-20  0:19 ` [PATCH 26/45] xfs: convert mount flags to features Darrick J. Wong
2022-01-31 22:59   ` Eric Sandeen
2022-01-31 23:31     ` Darrick J. Wong
2022-01-20  0:19 ` Darrick J. Wong [this message]
2022-01-20  0:19 ` [PATCH 28/45] xfs: replace XFS_FORCED_SHUTDOWN with xfs_is_shutdown Darrick J. Wong
2022-01-20  0:20 ` [PATCH 29/45] xfs: convert xfs_fs_geometry to use mount feature checks Darrick J. Wong
2022-01-20  0:20 ` [PATCH 30/45] xfs: open code sb verifier " Darrick J. Wong
2022-01-20  0:20 ` [PATCH 31/45] xfs: convert xfs_sb_version_has checks to use mount features Darrick J. Wong
2022-01-20  0:20 ` [PATCH 32/45] libxlog: replace xfs_sb_version checks with feature flag checks Darrick J. Wong
2022-01-28 22:03   ` Eric Sandeen
2022-01-20  0:20 ` [PATCH 33/45] libxfs: " Darrick J. Wong
2022-01-28 22:13   ` Eric Sandeen
2022-01-28 22:18     ` Darrick J. Wong
2022-01-20  0:20 ` [PATCH 34/45] xfs_{copy,db,logprint,repair}: " Darrick J. Wong
2022-01-28 22:16   ` Eric Sandeen
2022-01-20  0:20 ` [PATCH 35/45] xfs: remove unused xfs_sb_version_has wrappers Darrick J. Wong
2022-01-20  0:20 ` [PATCH 36/45] xfs: introduce xfs_sb_is_v5 helper Darrick J. Wong
2022-01-20  0:20 ` [PATCH 37/45] xfs: kill xfs_sb_version_has_v3inode() Darrick J. Wong
2022-01-20  0:20 ` [PATCH 38/45] libxfs: use opstate flags and functions for libxfs mount options Darrick J. Wong
2022-01-27 20:43   ` Eric Sandeen
2022-01-20  0:20 ` [PATCH 39/45] libxfs: remove pointless *XFS_MOUNT* flags Darrick J. Wong
2022-01-27 23:03   ` Eric Sandeen
2022-01-28  0:53     ` Darrick J. Wong
2022-01-28 20:01   ` Eric Sandeen
2022-01-28 21:59     ` Darrick J. Wong
2022-01-28 22:43   ` [PATCH v1.1 " Darrick J. Wong
2022-01-28 22:59     ` Eric Sandeen
2022-01-31 21:29     ` Eric Sandeen
2022-01-20  0:21 ` [PATCH 40/45] libxfs: clean up remaining LIBXFS_MOUNT flags Darrick J. Wong
2022-01-28 20:12   ` Eric Sandeen
2022-01-20  0:21 ` [PATCH 41/45] libxfs: always initialize internal buffer map Darrick J. Wong
2022-01-28 20:31   ` Eric Sandeen
2022-01-28 22:03     ` Darrick J. Wong
2022-01-28 22:27       ` Eric Sandeen
2022-01-31 20:30   ` Eric Sandeen
2022-01-20  0:21 ` [PATCH 42/45] libxfs: replace XFS_BUF_SET_ADDR with a function Darrick J. Wong
2022-01-28 20:53   ` Eric Sandeen
2022-01-28 23:04     ` Darrick J. Wong
2022-01-31 20:44       ` Eric Sandeen
2022-01-20  0:21 ` [PATCH 43/45] xfs: introduce xfs_buf_daddr() Darrick J. Wong
2022-01-20  0:21 ` [PATCH 44/45] xfs: convert bp->b_bn references to xfs_buf_daddr() Darrick J. Wong
2022-01-20  0:21 ` [PATCH 45/45] libxfs: rename buffer cache index variable b_bn Darrick J. Wong
2022-01-28 21:37   ` Eric Sandeen
2022-01-28 22:14     ` Darrick J. Wong
2022-01-28 22:31       ` Eric Sandeen
2022-01-28 20:54 ` [PATCHSET 00/45] xfsprogs: sync libxfs with 5.15 Eric Sandeen

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=164263799158.860211.16914496965938971659.stgit@magnolia \
    --to=djwong@kernel.org \
    --cc=dchinner@redhat.com \
    --cc=linux-xfs@vger.kernel.org \
    --cc=sandeen@sandeen.net \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.