Linux XFS filesystem development
 help / color / mirror / Atom feed
* [PATCHSET] xfs: kconfig and feature changes for 2025 LTS
@ 2025-09-03 14:59 Darrick J. Wong
  2025-09-03 14:59 ` [PATCH 1/4] xfs: disable deprecated features by default in Kconfig Darrick J. Wong
                   ` (3 more replies)
  0 siblings, 4 replies; 13+ messages in thread
From: Darrick J. Wong @ 2025-09-03 14:59 UTC (permalink / raw)
  To: djwong, cem; +Cc: preichl, linux-xfs

Hi all,

Ahead of the 2025 LTS kernel, disable by default the two features that
we promised to turn off in September 2025: V4 filesystems, and the
long-broken ASCII case insensitive directories.

Since online fsck has not had any major issues in the 16 months since it
was merged upstream, let's also turn that on by default.

If you're going to start using this code, I strongly recommend pulling
from my git trees, which are linked below.

This has been running on the djcloud for months with no problems.  Enjoy!
Comments and questions are, as always, welcome.

--D

kernel git tree:
https://git.kernel.org/cgit/linux/kernel/git/djwong/xfs-linux.git/log/?h=kconfig-2025-changes
---
Commits in this patchset:
 * xfs: disable deprecated features by default in Kconfig
 * xfs: remove deprecated mount options
 * xfs: remove deprecated sysctl knobs
 * xfs: enable online fsck by default in Kconfig
---
 fs/xfs/xfs_linux.h                |    2 -
 fs/xfs/xfs_mount.h                |   12 ++++---
 fs/xfs/xfs_sysctl.h               |    3 --
 Documentation/admin-guide/xfs.rst |   57 +++++------------------------------
 fs/xfs/Kconfig                    |   16 ++++------
 fs/xfs/libxfs/xfs_attr_leaf.c     |   23 +++-----------
 fs/xfs/libxfs/xfs_bmap.c          |   14 ++-------
 fs/xfs/libxfs/xfs_ialloc.c        |    4 +-
 fs/xfs/libxfs/xfs_inode_util.c    |   11 -------
 fs/xfs/libxfs/xfs_sb.c            |    9 ++----
 fs/xfs/xfs_globals.c              |    2 -
 fs/xfs/xfs_icache.c               |    6 +---
 fs/xfs/xfs_iops.c                 |   12 +++----
 fs/xfs/xfs_mount.c                |   13 --------
 fs/xfs/xfs_super.c                |   60 +------------------------------------
 fs/xfs/xfs_sysctl.c               |   29 +-----------------
 16 files changed, 43 insertions(+), 230 deletions(-)


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH 1/4] xfs: disable deprecated features by default in Kconfig
  2025-09-03 14:59 [PATCHSET] xfs: kconfig and feature changes for 2025 LTS Darrick J. Wong
@ 2025-09-03 14:59 ` Darrick J. Wong
  2025-09-05  8:30   ` Carlos Maiolino
  2025-09-03 15:00 ` [PATCH 2/4] xfs: remove deprecated mount options Darrick J. Wong
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 13+ messages in thread
From: Darrick J. Wong @ 2025-09-03 14:59 UTC (permalink / raw)
  To: djwong, cem; +Cc: linux-xfs

From: Darrick J. Wong <djwong@kernel.org>

We promised to turn off these old features by default in September 2025.
Do so now.

Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
---
 Documentation/admin-guide/xfs.rst |    5 ++---
 fs/xfs/Kconfig                    |    8 ++++----
 2 files changed, 6 insertions(+), 7 deletions(-)


diff --git a/Documentation/admin-guide/xfs.rst b/Documentation/admin-guide/xfs.rst
index a18328a5fb93be..693b09ca62922f 100644
--- a/Documentation/admin-guide/xfs.rst
+++ b/Documentation/admin-guide/xfs.rst
@@ -253,9 +253,8 @@ latest version and try again.
 
 The deprecation will take place in two parts.  Support for mounting V4
 filesystems can now be disabled at kernel build time via Kconfig option.
-The option will default to yes until September 2025, at which time it
-will be changed to default to no.  In September 2030, support will be
-removed from the codebase entirely.
+These options were changed to default to no in September 2025.  In
+September 2030, support will be removed from the codebase entirely.
 
 Note: Distributors may choose to withdraw V4 format support earlier than
 the dates listed above.
diff --git a/fs/xfs/Kconfig b/fs/xfs/Kconfig
index 065953475cf5eb..ecebd3ebab1342 100644
--- a/fs/xfs/Kconfig
+++ b/fs/xfs/Kconfig
@@ -25,7 +25,7 @@ config XFS_FS
 config XFS_SUPPORT_V4
 	bool "Support deprecated V4 (crc=0) format"
 	depends on XFS_FS
-	default y
+	default n
 	help
 	  The V4 filesystem format lacks certain features that are supported
 	  by the V5 format, such as metadata checksumming, strengthened
@@ -40,7 +40,7 @@ config XFS_SUPPORT_V4
 	  filesystem is a V4 filesystem.  If no such string is found, please
 	  upgrade xfsprogs to the latest version and try again.
 
-	  This option will become default N in September 2025.  Support for the
+	  This option became default N in September 2025.  Support for the
 	  V4 format will be removed entirely in September 2030.  Distributors
 	  can say N here to withdraw support earlier.
 
@@ -50,7 +50,7 @@ config XFS_SUPPORT_V4
 config XFS_SUPPORT_ASCII_CI
 	bool "Support deprecated case-insensitive ascii (ascii-ci=1) format"
 	depends on XFS_FS
-	default y
+	default n
 	help
 	  The ASCII case insensitivity filesystem feature only works correctly
 	  on systems that have been coerced into using ISO 8859-1, and it does
@@ -67,7 +67,7 @@ config XFS_SUPPORT_ASCII_CI
 	  filesystem is a case-insensitive filesystem.  If no such string is
 	  found, please upgrade xfsprogs to the latest version and try again.
 
-	  This option will become default N in September 2025.  Support for the
+	  This option became default N in September 2025.  Support for the
 	  feature will be removed entirely in September 2030.  Distributors
 	  can say N here to withdraw support earlier.
 


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 2/4] xfs: remove deprecated mount options
  2025-09-03 14:59 [PATCHSET] xfs: kconfig and feature changes for 2025 LTS Darrick J. Wong
  2025-09-03 14:59 ` [PATCH 1/4] xfs: disable deprecated features by default in Kconfig Darrick J. Wong
@ 2025-09-03 15:00 ` Darrick J. Wong
  2025-09-05  8:35   ` Carlos Maiolino
  2025-09-03 15:00 ` [PATCH 3/4] xfs: remove deprecated sysctl knobs Darrick J. Wong
  2025-09-03 15:00 ` [PATCH 4/4] xfs: enable online fsck by default in Kconfig Darrick J. Wong
  3 siblings, 1 reply; 13+ messages in thread
From: Darrick J. Wong @ 2025-09-03 15:00 UTC (permalink / raw)
  To: djwong, cem; +Cc: preichl, linux-xfs

From: Darrick J. Wong <djwong@kernel.org>

These four mount options were scheduled for removal in September 2025,
so remove them now.

Cc: preichl@redhat.com
Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
---
 fs/xfs/xfs_mount.h                |   12 ++++---
 Documentation/admin-guide/xfs.rst |   26 +---------------
 fs/xfs/libxfs/xfs_attr_leaf.c     |   23 +++-----------
 fs/xfs/libxfs/xfs_bmap.c          |   14 ++-------
 fs/xfs/libxfs/xfs_ialloc.c        |    4 +-
 fs/xfs/libxfs/xfs_sb.c            |    9 ++----
 fs/xfs/xfs_icache.c               |    6 +---
 fs/xfs/xfs_mount.c                |   13 --------
 fs/xfs/xfs_super.c                |   60 +------------------------------------
 9 files changed, 25 insertions(+), 142 deletions(-)


diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h
index 97de44c32272f2..f046d1215b043c 100644
--- a/fs/xfs/xfs_mount.h
+++ b/fs/xfs/xfs_mount.h
@@ -363,7 +363,6 @@ typedef struct xfs_mount {
 #define XFS_FEAT_EXTFLG		(1ULL << 7)	/* unwritten extents */
 #define XFS_FEAT_ASCIICI	(1ULL << 8)	/* ASCII only case-insens. */
 #define XFS_FEAT_LAZYSBCOUNT	(1ULL << 9)	/* Superblk counters */
-#define XFS_FEAT_ATTR2		(1ULL << 10)	/* dynamic attr fork */
 #define XFS_FEAT_PARENT		(1ULL << 11)	/* parent pointers */
 #define XFS_FEAT_PROJID32	(1ULL << 12)	/* 32 bit project id */
 #define XFS_FEAT_CRC		(1ULL << 13)	/* metadata CRCs */
@@ -386,7 +385,6 @@ typedef struct xfs_mount {
 
 /* Mount features */
 #define XFS_FEAT_NOLIFETIME	(1ULL << 47)	/* disable lifetime hints */
-#define XFS_FEAT_NOATTR2	(1ULL << 48)	/* disable attr2 creation */
 #define XFS_FEAT_NOALIGN	(1ULL << 49)	/* ignore alignment */
 #define XFS_FEAT_ALLOCSIZE	(1ULL << 50)	/* user specified allocation size */
 #define XFS_FEAT_LARGE_IOSIZE	(1ULL << 51)	/* report large preferred
@@ -396,7 +394,6 @@ typedef struct xfs_mount {
 #define XFS_FEAT_DISCARD	(1ULL << 54)	/* discard unused blocks */
 #define XFS_FEAT_GRPID		(1ULL << 55)	/* group-ID assigned from directory */
 #define XFS_FEAT_SMALL_INUMS	(1ULL << 56)	/* user wants 32bit inodes */
-#define XFS_FEAT_IKEEP		(1ULL << 57)	/* keep empty inode clusters*/
 #define XFS_FEAT_SWALLOC	(1ULL << 58)	/* stripe width allocation */
 #define XFS_FEAT_FILESTREAMS	(1ULL << 59)	/* use filestreams allocator */
 #define XFS_FEAT_DAX_ALWAYS	(1ULL << 60)	/* DAX always enabled */
@@ -504,12 +501,17 @@ __XFS_HAS_V4_FEAT(align, ALIGN)
 __XFS_HAS_V4_FEAT(logv2, LOGV2)
 __XFS_HAS_V4_FEAT(extflg, EXTFLG)
 __XFS_HAS_V4_FEAT(lazysbcount, LAZYSBCOUNT)
-__XFS_ADD_V4_FEAT(attr2, ATTR2)
 __XFS_ADD_V4_FEAT(projid32, PROJID32)
 __XFS_HAS_V4_FEAT(v3inodes, V3INODES)
 __XFS_HAS_V4_FEAT(crc, CRC)
 __XFS_HAS_V4_FEAT(pquotino, PQUOTINO)
 
+static inline void xfs_add_attr2(struct xfs_mount *mp)
+{
+	if (IS_ENABLED(CONFIG_XFS_SUPPORT_V4))
+		xfs_sb_version_addattr2(&mp->m_sb);
+}
+
 /*
  * Mount features
  *
@@ -517,7 +519,6 @@ __XFS_HAS_V4_FEAT(pquotino, PQUOTINO)
  * bit inodes and read-only state, are kept as operational state rather than
  * features.
  */
-__XFS_HAS_FEAT(noattr2, NOATTR2)
 __XFS_HAS_FEAT(noalign, NOALIGN)
 __XFS_HAS_FEAT(allocsize, ALLOCSIZE)
 __XFS_HAS_FEAT(large_iosize, LARGE_IOSIZE)
@@ -526,7 +527,6 @@ __XFS_HAS_FEAT(dirsync, DIRSYNC)
 __XFS_HAS_FEAT(discard, DISCARD)
 __XFS_HAS_FEAT(grpid, GRPID)
 __XFS_HAS_FEAT(small_inums, SMALL_INUMS)
-__XFS_HAS_FEAT(ikeep, IKEEP)
 __XFS_HAS_FEAT(swalloc, SWALLOC)
 __XFS_HAS_FEAT(filestreams, FILESTREAMS)
 __XFS_HAS_FEAT(dax_always, DAX_ALWAYS)
diff --git a/Documentation/admin-guide/xfs.rst b/Documentation/admin-guide/xfs.rst
index 693b09ca62922f..7ad746a3e66c25 100644
--- a/Documentation/admin-guide/xfs.rst
+++ b/Documentation/admin-guide/xfs.rst
@@ -34,22 +34,6 @@ When mounting an XFS filesystem, the following options are accepted.
 	to the file. Specifying a fixed ``allocsize`` value turns off
 	the dynamic behaviour.
 
-  attr2 or noattr2
-	The options enable/disable an "opportunistic" improvement to
-	be made in the way inline extended attributes are stored
-	on-disk.  When the new form is used for the first time when
-	``attr2`` is selected (either when setting or removing extended
-	attributes) the on-disk superblock feature bit field will be
-	updated to reflect this format being in use.
-
-	The default behaviour is determined by the on-disk feature
-	bit indicating that ``attr2`` behaviour is active. If either
-	mount option is set, then that becomes the new default used
-	by the filesystem.
-
-	CRC enabled filesystems always use the ``attr2`` format, and so
-	will reject the ``noattr2`` mount option if it is set.
-
   discard or nodiscard (default)
 	Enable/disable the issuing of commands to let the block
 	device reclaim space freed by the filesystem.  This is
@@ -75,12 +59,6 @@ When mounting an XFS filesystem, the following options are accepted.
 	across the entire filesystem rather than just on directories
 	configured to use it.
 
-  ikeep or noikeep (default)
-	When ``ikeep`` is specified, XFS does not delete empty inode
-	clusters and keeps them around on disk.  When ``noikeep`` is
-	specified, empty inode clusters are returned to the free
-	space pool.
-
   inode32 or inode64 (default)
 	When ``inode32`` is specified, it indicates that XFS limits
 	inode creation to locations which will not result in inode
@@ -267,8 +245,6 @@ Deprecated Mount Options
 ============================    ================
 Mounting with V4 filesystem     September 2030
 Mounting ascii-ci filesystem    September 2030
-ikeep/noikeep			September 2025
-attr2/noattr2			September 2025
 ============================    ================
 
 
@@ -284,6 +260,8 @@ Removed Mount Options
   osyncisdsync/osyncisosync	v4.0
   barrier			v4.19
   nobarrier			v4.19
+  ikeep/noikeep			v6.18
+  attr2/noattr2			v6.18
 ===========================     =======
 
 sysctls
diff --git a/fs/xfs/libxfs/xfs_attr_leaf.c b/fs/xfs/libxfs/xfs_attr_leaf.c
index fddb55605e0cc6..47213e6023dd4b 100644
--- a/fs/xfs/libxfs/xfs_attr_leaf.c
+++ b/fs/xfs/libxfs/xfs_attr_leaf.c
@@ -667,12 +667,8 @@ xfs_attr_shortform_bytesfit(
 
 	/*
 	 * For attr2 we can try to move the forkoff if there is space in the
-	 * literal area, but for the old format we are done if there is no
-	 * space in the fixed attribute fork.
+	 * literal area
 	 */
-	if (!xfs_has_attr2(mp))
-		return 0;
-
 	dsize = dp->i_df.if_bytes;
 
 	switch (dp->i_df.if_format) {
@@ -723,22 +719,16 @@ xfs_attr_shortform_bytesfit(
 }
 
 /*
- * 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.
+ * Switch on the ATTR2 superblock bit (implies also FEATURES2) unless
+ * on-disk version bit says it is already set
  */
 STATIC void
 xfs_sbversion_add_attr2(
 	struct xfs_mount	*mp,
 	struct xfs_trans	*tp)
 {
-	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);
@@ -889,7 +879,7 @@ xfs_attr_sf_removename(
 	/*
 	 * Fix up the start offset of the attribute fork
 	 */
-	if (totsize == sizeof(struct xfs_attr_sf_hdr) && xfs_has_attr2(mp) &&
+	if (totsize == sizeof(struct xfs_attr_sf_hdr) &&
 	    (dp->i_df.if_format != XFS_DINODE_FMT_BTREE) &&
 	    !(args->op_flags & (XFS_DA_OP_ADDNAME | XFS_DA_OP_REPLACE)) &&
 	    !xfs_has_parent(mp)) {
@@ -900,7 +890,6 @@ xfs_attr_sf_removename(
 		ASSERT(dp->i_forkoff);
 		ASSERT(totsize > sizeof(struct xfs_attr_sf_hdr) ||
 				(args->op_flags & XFS_DA_OP_ADDNAME) ||
-				!xfs_has_attr2(mp) ||
 				dp->i_df.if_format == XFS_DINODE_FMT_BTREE ||
 				xfs_has_parent(mp));
 		xfs_trans_log_inode(args->trans, dp,
@@ -1040,8 +1029,7 @@ xfs_attr_shortform_allfit(
 		bytes += xfs_attr_sf_entsize_byname(name_loc->namelen,
 					be16_to_cpu(name_loc->valuelen));
 	}
-	if (xfs_has_attr2(dp->i_mount) &&
-	    (dp->i_df.if_format != XFS_DINODE_FMT_BTREE) &&
+	if ((dp->i_df.if_format != XFS_DINODE_FMT_BTREE) &&
 	    (bytes == sizeof(struct xfs_attr_sf_hdr)))
 		return -1;
 	return xfs_attr_shortform_bytesfit(dp, bytes);
@@ -1161,7 +1149,6 @@ xfs_attr3_leaf_to_shortform(
 		 * this case.
 		 */
 		if (!(args->op_flags & XFS_DA_OP_REPLACE)) {
-			ASSERT(xfs_has_attr2(dp->i_mount));
 			ASSERT(dp->i_df.if_format != XFS_DINODE_FMT_BTREE);
 			xfs_attr_fork_remove(dp, args->trans);
 		}
diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
index d954f9b8071f4b..80bdb537fcf783 100644
--- a/fs/xfs/libxfs/xfs_bmap.c
+++ b/fs/xfs/libxfs/xfs_bmap.c
@@ -997,8 +997,7 @@ xfs_bmap_add_attrfork_local(
 static int
 xfs_bmap_set_attrforkoff(
 	struct xfs_inode	*ip,
-	int			size,
-	int			*version)
+	int			size)
 {
 	int			default_size = xfs_default_attroffset(ip) >> 3;
 
@@ -1012,8 +1011,6 @@ xfs_bmap_set_attrforkoff(
 		ip->i_forkoff = xfs_attr_shortform_bytesfit(ip, size);
 		if (!ip->i_forkoff)
 			ip->i_forkoff = default_size;
-		else if (xfs_has_attr2(ip->i_mount) && version)
-			*version = 2;
 		break;
 	default:
 		ASSERT(0);
@@ -1035,7 +1032,6 @@ xfs_bmap_add_attrfork(
 	int			rsvd)		/* xact may use reserved blks */
 {
 	struct xfs_mount	*mp = tp->t_mountp;
-	int			version = 1;	/* superblock attr version */
 	int			logflags;	/* logging flags */
 	int			error;		/* error return value */
 
@@ -1045,7 +1041,7 @@ xfs_bmap_add_attrfork(
 	ASSERT(!xfs_inode_has_attr_fork(ip));
 
 	xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
-	error = xfs_bmap_set_attrforkoff(ip, size, &version);
+	error = xfs_bmap_set_attrforkoff(ip, size);
 	if (error)
 		return error;
 
@@ -1069,16 +1065,12 @@ xfs_bmap_add_attrfork(
 		xfs_trans_log_inode(tp, ip, logflags);
 	if (error)
 		return error;
-	if (!xfs_has_attr(mp) ||
-	   (!xfs_has_attr2(mp) && version == 2)) {
+	if (!xfs_has_attr(mp)) {
 		bool log_sb = false;
 
 		spin_lock(&mp->m_sb_lock);
 		if (!xfs_has_attr(mp)) {
 			xfs_add_attr(mp);
-			log_sb = true;
-		}
-		if (!xfs_has_attr2(mp) && version == 2) {
 			xfs_add_attr2(mp);
 			log_sb = true;
 		}
diff --git a/fs/xfs/libxfs/xfs_ialloc.c b/fs/xfs/libxfs/xfs_ialloc.c
index 750111634d9f7b..5fefdd4fe75dbd 100644
--- a/fs/xfs/libxfs/xfs_ialloc.c
+++ b/fs/xfs/libxfs/xfs_ialloc.c
@@ -2140,7 +2140,7 @@ xfs_difree_inobt(
 	 * remove the chunk if the block size is large enough for multiple inode
 	 * chunks (that might not be free).
 	 */
-	if (!xfs_has_ikeep(mp) && rec.ir_free == XFS_INOBT_ALL_FREE &&
+	if (rec.ir_free == XFS_INOBT_ALL_FREE &&
 	    mp->m_sb.sb_inopblock <= XFS_INODES_PER_CHUNK) {
 		xic->deleted = true;
 		xic->first_ino = xfs_agino_to_ino(pag, rec.ir_startino);
@@ -2286,7 +2286,7 @@ xfs_difree_finobt(
 	 * enough for multiple chunks. Leave the finobt record to remain in sync
 	 * with the inobt.
 	 */
-	if (!xfs_has_ikeep(mp) && rec.ir_free == XFS_INOBT_ALL_FREE &&
+	if (rec.ir_free == XFS_INOBT_ALL_FREE &&
 	    mp->m_sb.sb_inopblock <= XFS_INODES_PER_CHUNK) {
 		error = xfs_btree_delete(cur, &i);
 		if (error)
diff --git a/fs/xfs/libxfs/xfs_sb.c b/fs/xfs/libxfs/xfs_sb.c
index 711e180f9ebb83..cdd16dd805d77c 100644
--- a/fs/xfs/libxfs/xfs_sb.c
+++ b/fs/xfs/libxfs/xfs_sb.c
@@ -142,8 +142,6 @@ xfs_sb_version_to_features(
 	if (sbp->sb_versionnum & XFS_SB_VERSION_MOREBITSBIT) {
 		if (sbp->sb_features2 & XFS_SB_VERSION2_LAZYSBCOUNTBIT)
 			features |= XFS_FEAT_LAZYSBCOUNT;
-		if (sbp->sb_features2 & XFS_SB_VERSION2_ATTR2BIT)
-			features |= XFS_FEAT_ATTR2;
 		if (sbp->sb_features2 & XFS_SB_VERSION2_PROJID32BIT)
 			features |= XFS_FEAT_PROJID32;
 		if (sbp->sb_features2 & XFS_SB_VERSION2_FTYPE)
@@ -155,7 +153,7 @@ xfs_sb_version_to_features(
 
 	/* Always on V5 features */
 	features |= XFS_FEAT_ALIGN | XFS_FEAT_LOGV2 | XFS_FEAT_EXTFLG |
-		    XFS_FEAT_LAZYSBCOUNT | XFS_FEAT_ATTR2 | XFS_FEAT_PROJID32 |
+		    XFS_FEAT_LAZYSBCOUNT | XFS_FEAT_PROJID32 |
 		    XFS_FEAT_V3INODES | XFS_FEAT_CRC | XFS_FEAT_PQUOTINO;
 
 	/* Optional V5 features */
@@ -1524,7 +1522,8 @@ xfs_fs_geometry(
 	geo->version = XFS_FSOP_GEOM_VERSION;
 	geo->flags = XFS_FSOP_GEOM_FLAGS_NLINK |
 		     XFS_FSOP_GEOM_FLAGS_DIRV2 |
-		     XFS_FSOP_GEOM_FLAGS_EXTFLG;
+		     XFS_FSOP_GEOM_FLAGS_EXTFLG |
+		     XFS_FSOP_GEOM_FLAGS_ATTR2;
 	if (xfs_has_attr(mp))
 		geo->flags |= XFS_FSOP_GEOM_FLAGS_ATTR;
 	if (xfs_has_quota(mp))
@@ -1537,8 +1536,6 @@ xfs_fs_geometry(
 		geo->flags |= XFS_FSOP_GEOM_FLAGS_DIRV2CI;
 	if (xfs_has_lazysbcount(mp))
 		geo->flags |= XFS_FSOP_GEOM_FLAGS_LAZYSB;
-	if (xfs_has_attr2(mp))
-		geo->flags |= XFS_FSOP_GEOM_FLAGS_ATTR2;
 	if (xfs_has_projid32(mp))
 		geo->flags |= XFS_FSOP_GEOM_FLAGS_PROJID32;
 	if (xfs_has_crc(mp))
diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c
index 4cf7abe5014371..e44040206851fc 100644
--- a/fs/xfs/xfs_icache.c
+++ b/fs/xfs/xfs_icache.c
@@ -646,8 +646,7 @@ xfs_iget_cache_miss(
 		goto out_destroy;
 
 	/*
-	 * For version 5 superblocks, if we are initialising a new inode and we
-	 * are not utilising the XFS_FEAT_IKEEP inode cluster mode, we can
+	 * For version 5 superblocks, if we are initialising a new inode, we
 	 * simply build the new inode core with a random generation number.
 	 *
 	 * For version 4 (and older) superblocks, log recovery is dependent on
@@ -655,8 +654,7 @@ xfs_iget_cache_miss(
 	 * value and hence we must also read the inode off disk even when
 	 * initializing new inodes.
 	 */
-	if (xfs_has_v3inodes(mp) &&
-	    (flags & XFS_IGET_CREATE) && !xfs_has_ikeep(mp)) {
+	if (xfs_has_v3inodes(mp) && (flags & XFS_IGET_CREATE)) {
 		VFS_I(ip)->i_generation = get_random_u32();
 	} else {
 		struct xfs_buf		*bp;
diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c
index dc32c5e34d8176..0953f6ae94abc8 100644
--- a/fs/xfs/xfs_mount.c
+++ b/fs/xfs/xfs_mount.c
@@ -1057,19 +1057,6 @@ xfs_mountfs(
 	xfs_inodegc_start(mp);
 	xfs_blockgc_start(mp);
 
-	/*
-	 * Now that we've recovered any pending superblock feature bit
-	 * additions, we can finish setting up the attr2 behaviour for the
-	 * mount. The noattr2 option overrides the superblock flag, so only
-	 * check the superblock feature flag if the mount option is not set.
-	 */
-	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;
-	}
-
 	if (xfs_has_metadir(mp)) {
 		error = xfs_mount_setup_metadir(mp);
 		if (error)
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
index bb0a82635a770d..77acb3e5a4eca1 100644
--- a/fs/xfs/xfs_super.c
+++ b/fs/xfs/xfs_super.c
@@ -105,8 +105,8 @@ enum {
 	Opt_logbufs, Opt_logbsize, Opt_logdev, Opt_rtdev,
 	Opt_wsync, Opt_noalign, Opt_swalloc, Opt_sunit, Opt_swidth, Opt_nouuid,
 	Opt_grpid, Opt_nogrpid, Opt_bsdgroups, Opt_sysvgroups,
-	Opt_allocsize, Opt_norecovery, Opt_inode64, Opt_inode32, Opt_ikeep,
-	Opt_noikeep, Opt_largeio, Opt_nolargeio, Opt_attr2, Opt_noattr2,
+	Opt_allocsize, Opt_norecovery, Opt_inode64, Opt_inode32,
+	Opt_largeio, Opt_nolargeio,
 	Opt_filestreams, Opt_quota, Opt_noquota, Opt_usrquota, Opt_grpquota,
 	Opt_prjquota, Opt_uquota, Opt_gquota, Opt_pquota,
 	Opt_uqnoenforce, Opt_gqnoenforce, Opt_pqnoenforce, Opt_qnoenforce,
@@ -133,12 +133,8 @@ static const struct fs_parameter_spec xfs_fs_parameters[] = {
 	fsparam_flag("norecovery",	Opt_norecovery),
 	fsparam_flag("inode64",		Opt_inode64),
 	fsparam_flag("inode32",		Opt_inode32),
-	fsparam_flag("ikeep",		Opt_ikeep),
-	fsparam_flag("noikeep",		Opt_noikeep),
 	fsparam_flag("largeio",		Opt_largeio),
 	fsparam_flag("nolargeio",	Opt_nolargeio),
-	fsparam_flag("attr2",		Opt_attr2),
-	fsparam_flag("noattr2",		Opt_noattr2),
 	fsparam_flag("filestreams",	Opt_filestreams),
 	fsparam_flag("quota",		Opt_quota),
 	fsparam_flag("noquota",		Opt_noquota),
@@ -175,13 +171,11 @@ xfs_fs_show_options(
 {
 	static struct proc_xfs_info xfs_info_set[] = {
 		/* the few simple ones we can get from the mount struct */
-		{ 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" },
@@ -1087,15 +1081,6 @@ xfs_finish_flags(
 		}
 	}
 
-	/*
-	 * V5 filesystems always use attr2 format for attributes.
-	 */
-	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;
-	}
-
 	/*
 	 * prohibit r/w mounts of read-only filesystems
 	 */
@@ -1542,22 +1527,6 @@ xfs_fs_parse_param(
 		return 0;
 #endif
 	/* Following mount options will be removed in September 2025 */
-	case Opt_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_FEAT_IKEEP, false);
-		parsing_mp->m_features &= ~XFS_FEAT_IKEEP;
-		return 0;
-	case Opt_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_FEAT_NOATTR2, true);
-		parsing_mp->m_features |= XFS_FEAT_NOATTR2;
-		return 0;
 	case Opt_max_open_zones:
 		parsing_mp->m_max_open_zones = result.uint_32;
 		return 0;
@@ -1593,16 +1562,6 @@ xfs_fs_validate_params(
 		return -EINVAL;
 	}
 
-	/*
-	 * 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 (xfs_has_noalign(mp) && (mp->m_dalign || mp->m_swidth)) {
 		xfs_warn(mp,
 	"sunit and swidth options incompatible with the noalign option");
@@ -2177,21 +2136,6 @@ xfs_fs_reconfigure(
 	if (error)
 		return error;
 
-	/* attr2 -> noattr2 */
-	if (xfs_has_noattr2(new_mp)) {
-		if (xfs_has_crc(mp)) {
-			xfs_warn(mp,
-			"attr2 is always enabled for a V5 filesystem - can't be changed.");
-			return -EINVAL;
-		}
-		mp->m_features &= ~XFS_FEAT_ATTR2;
-		mp->m_features |= XFS_FEAT_NOATTR2;
-	} else if (xfs_has_attr2(new_mp)) {
-		/* noattr2 -> attr2 */
-		mp->m_features &= ~XFS_FEAT_NOATTR2;
-		mp->m_features |= XFS_FEAT_ATTR2;
-	}
-
 	/* Validate new max_atomic_write option before making other changes */
 	if (mp->m_awu_max_bytes != new_mp->m_awu_max_bytes) {
 		error = xfs_set_max_atomic_write_opt(mp,


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 3/4] xfs: remove deprecated sysctl knobs
  2025-09-03 14:59 [PATCHSET] xfs: kconfig and feature changes for 2025 LTS Darrick J. Wong
  2025-09-03 14:59 ` [PATCH 1/4] xfs: disable deprecated features by default in Kconfig Darrick J. Wong
  2025-09-03 15:00 ` [PATCH 2/4] xfs: remove deprecated mount options Darrick J. Wong
@ 2025-09-03 15:00 ` Darrick J. Wong
  2025-09-05  8:36   ` Carlos Maiolino
  2025-09-03 15:00 ` [PATCH 4/4] xfs: enable online fsck by default in Kconfig Darrick J. Wong
  3 siblings, 1 reply; 13+ messages in thread
From: Darrick J. Wong @ 2025-09-03 15:00 UTC (permalink / raw)
  To: djwong, cem; +Cc: linux-xfs

From: Darrick J. Wong <djwong@kernel.org>

These sysctl knobs were scheduled for removal in September 2025.  That
time has come, so remove them.

Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
---
 fs/xfs/xfs_linux.h                |    2 --
 fs/xfs/xfs_sysctl.h               |    3 ---
 Documentation/admin-guide/xfs.rst |   26 ++++----------------------
 fs/xfs/libxfs/xfs_inode_util.c    |   11 -----------
 fs/xfs/xfs_globals.c              |    2 --
 fs/xfs/xfs_iops.c                 |   12 +++++-------
 fs/xfs/xfs_sysctl.c               |   29 +----------------------------
 7 files changed, 10 insertions(+), 75 deletions(-)


diff --git a/fs/xfs/xfs_linux.h b/fs/xfs/xfs_linux.h
index 9a2221b4aa21ed..4dd747bdbccab2 100644
--- a/fs/xfs/xfs_linux.h
+++ b/fs/xfs/xfs_linux.h
@@ -89,8 +89,6 @@ typedef __u32			xfs_nlink_t;
 #undef XFS_NATIVE_HOST
 #endif
 
-#define irix_sgid_inherit	xfs_params.sgid_inherit.val
-#define irix_symlink_mode	xfs_params.symlink_mode.val
 #define xfs_panic_mask		xfs_params.panic_mask.val
 #define xfs_error_level		xfs_params.error_level.val
 #define xfs_syncd_centisecs	xfs_params.syncd_timer.val
diff --git a/fs/xfs/xfs_sysctl.h b/fs/xfs/xfs_sysctl.h
index 51646f066c4f7d..ed9d896079c1a8 100644
--- a/fs/xfs/xfs_sysctl.h
+++ b/fs/xfs/xfs_sysctl.h
@@ -19,9 +19,6 @@ typedef struct xfs_sysctl_val {
 } xfs_sysctl_val_t;
 
 typedef struct xfs_param {
-	xfs_sysctl_val_t sgid_inherit;	/* Inherit S_ISGID if process' GID is
-					 * not a member of parent dir GID. */
-	xfs_sysctl_val_t symlink_mode;	/* Link creat mode affected by umask */
 	xfs_sysctl_val_t panic_mask;	/* bitmask to cause panic on errors. */
 	xfs_sysctl_val_t error_level;	/* Degree of reporting for problems  */
 	xfs_sysctl_val_t syncd_timer;	/* Interval between xfssyncd wakeups */
diff --git a/Documentation/admin-guide/xfs.rst b/Documentation/admin-guide/xfs.rst
index 7ad746a3e66c25..d6f531f2c0e694 100644
--- a/Documentation/admin-guide/xfs.rst
+++ b/Documentation/admin-guide/xfs.rst
@@ -289,9 +289,6 @@ The following sysctls are available for the XFS filesystem:
 	removes unused preallocation from clean inodes and releases
 	the unused space back to the free pool.
 
-  fs.xfs.speculative_cow_prealloc_lifetime
-	This is an alias for speculative_prealloc_lifetime.
-
   fs.xfs.error_level		(Min: 0  Default: 3  Max: 11)
 	A volume knob for error reporting when internal errors occur.
 	This will generate detailed messages & backtraces for filesystem
@@ -318,17 +315,6 @@ The following sysctls are available for the XFS filesystem:
 
 	This option is intended for debugging only.
 
-  fs.xfs.irix_symlink_mode	(Min: 0  Default: 0  Max: 1)
-	Controls whether symlinks are created with mode 0777 (default)
-	or whether their mode is affected by the umask (irix mode).
-
-  fs.xfs.irix_sgid_inherit	(Min: 0  Default: 0  Max: 1)
-	Controls files created in SGID directories.
-	If the group ID of the new file does not match the effective group
-	ID or one of the supplementary group IDs of the parent dir, the
-	ISGID bit is cleared if the irix_sgid_inherit compatibility sysctl
-	is set.
-
   fs.xfs.inherit_sync		(Min: 0  Default: 1  Max: 1)
 	Setting this to "1" will cause the "sync" flag set
 	by the **xfs_io(8)** chattr command on a directory to be
@@ -364,14 +350,7 @@ The following sysctls are available for the XFS filesystem:
 Deprecated Sysctls
 ==================
 
-===========================================     ================
-  Name                                          Removal Schedule
-===========================================     ================
-fs.xfs.irix_sgid_inherit                        September 2025
-fs.xfs.irix_symlink_mode                        September 2025
-fs.xfs.speculative_cow_prealloc_lifetime        September 2025
-===========================================     ================
-
+None currently.
 
 Removed Sysctls
 ===============
@@ -381,6 +360,9 @@ Removed Sysctls
 =============================	=======
   fs.xfs.xfsbufd_centisec	v4.0
   fs.xfs.age_buffer_centisecs	v4.0
+  fs.xfs.irix_symlink_mode      v6.18
+  fs.xfs.irix_sgid_inherit      v6.18
+  fs.xfs.speculative_cow_prealloc_lifetime      v6.18
 =============================	=======
 
 Error handling
diff --git a/fs/xfs/libxfs/xfs_inode_util.c b/fs/xfs/libxfs/xfs_inode_util.c
index 48fe49a5f050f3..309ce6dd555383 100644
--- a/fs/xfs/libxfs/xfs_inode_util.c
+++ b/fs/xfs/libxfs/xfs_inode_util.c
@@ -299,17 +299,6 @@ xfs_inode_init(
 		} else {
 			inode_init_owner(args->idmap, inode, dir, args->mode);
 		}
-
-		/*
-		 * If the group ID of the new file does not match the effective
-		 * group ID or one of the supplementary group IDs, the S_ISGID
-		 * bit is cleared (and only if the irix_sgid_inherit
-		 * compatibility variable is set).
-		 */
-		if (irix_sgid_inherit && (inode->i_mode & S_ISGID) &&
-		    !vfsgid_in_group_p(i_gid_into_vfsgid(args->idmap, inode)))
-			inode->i_mode &= ~S_ISGID;
-
 		ip->i_projid = xfs_get_initial_prid(pip);
 	}
 
diff --git a/fs/xfs/xfs_globals.c b/fs/xfs/xfs_globals.c
index f6f628c01febaf..566fd663c95bba 100644
--- a/fs/xfs/xfs_globals.c
+++ b/fs/xfs/xfs_globals.c
@@ -14,8 +14,6 @@
  */
 xfs_param_t xfs_params = {
 			  /*	MIN		DFLT		MAX	*/
-	.sgid_inherit	= {	0,		0,		1	},
-	.symlink_mode	= {	0,		0,		1	},
 	.panic_mask	= {	0,		0,		XFS_PTAG_MASK},
 	.error_level	= {	0,		3,		11	},
 	.syncd_timer	= {	1*100,		30*100,		7200*100},
diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c
index 603effabe1ee12..afd041e28bb26a 100644
--- a/fs/xfs/xfs_iops.c
+++ b/fs/xfs/xfs_iops.c
@@ -431,14 +431,12 @@ xfs_vn_symlink(
 	struct dentry		*dentry,
 	const char		*symname)
 {
-	struct inode	*inode;
-	struct xfs_inode *cip = NULL;
-	struct xfs_name	name;
-	int		error;
-	umode_t		mode;
+	struct inode		*inode;
+	struct xfs_inode	*cip = NULL;
+	struct xfs_name		name;
+	int			error;
+	umode_t			mode = S_IFLNK | S_IRWXUGO;
 
-	mode = S_IFLNK |
-		(irix_symlink_mode ? 0777 & ~current_umask() : S_IRWXUGO);
 	error = xfs_dentry_mode_to_name(&name, dentry, mode);
 	if (unlikely(error))
 		goto out;
diff --git a/fs/xfs/xfs_sysctl.c b/fs/xfs/xfs_sysctl.c
index 751dc74a30671a..9918f14b4874fd 100644
--- a/fs/xfs/xfs_sysctl.c
+++ b/fs/xfs/xfs_sysctl.c
@@ -50,7 +50,7 @@ xfs_panic_mask_proc_handler(
 }
 #endif /* CONFIG_PROC_FS */
 
-STATIC int
+static inline int
 xfs_deprecated_dointvec_minmax(
 	const struct ctl_table	*ctl,
 	int			write,
@@ -67,24 +67,6 @@ xfs_deprecated_dointvec_minmax(
 }
 
 static const struct ctl_table xfs_table[] = {
-	{
-		.procname	= "irix_sgid_inherit",
-		.data		= &xfs_params.sgid_inherit.val,
-		.maxlen		= sizeof(int),
-		.mode		= 0644,
-		.proc_handler	= xfs_deprecated_dointvec_minmax,
-		.extra1		= &xfs_params.sgid_inherit.min,
-		.extra2		= &xfs_params.sgid_inherit.max
-	},
-	{
-		.procname	= "irix_symlink_mode",
-		.data		= &xfs_params.symlink_mode.val,
-		.maxlen		= sizeof(int),
-		.mode		= 0644,
-		.proc_handler	= xfs_deprecated_dointvec_minmax,
-		.extra1		= &xfs_params.symlink_mode.min,
-		.extra2		= &xfs_params.symlink_mode.max
-	},
 	{
 		.procname	= "panic_mask",
 		.data		= &xfs_params.panic_mask.val,
@@ -185,15 +167,6 @@ static const struct ctl_table xfs_table[] = {
 		.extra1		= &xfs_params.blockgc_timer.min,
 		.extra2		= &xfs_params.blockgc_timer.max,
 	},
-	{
-		.procname	= "speculative_cow_prealloc_lifetime",
-		.data		= &xfs_params.blockgc_timer.val,
-		.maxlen		= sizeof(int),
-		.mode		= 0644,
-		.proc_handler	= xfs_deprecated_dointvec_minmax,
-		.extra1		= &xfs_params.blockgc_timer.min,
-		.extra2		= &xfs_params.blockgc_timer.max,
-	},
 	/* please keep this the last entry */
 #ifdef CONFIG_PROC_FS
 	{


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 4/4] xfs: enable online fsck by default in Kconfig
  2025-09-03 14:59 [PATCHSET] xfs: kconfig and feature changes for 2025 LTS Darrick J. Wong
                   ` (2 preceding siblings ...)
  2025-09-03 15:00 ` [PATCH 3/4] xfs: remove deprecated sysctl knobs Darrick J. Wong
@ 2025-09-03 15:00 ` Darrick J. Wong
  2025-09-03 18:07   ` Vlastimil Babka
  2025-09-04  2:43   ` [PATCH v1.1 " Darrick J. Wong
  3 siblings, 2 replies; 13+ messages in thread
From: Darrick J. Wong @ 2025-09-03 15:00 UTC (permalink / raw)
  To: djwong, cem; +Cc: linux-xfs

From: Darrick J. Wong <djwong@kernel.org>

Online fsck has been a part of upstream for over a year now without any
serious problems.  Turn it on by default in time for the 2025 LTS
kernel.

Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
---
 fs/xfs/Kconfig |    8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)


diff --git a/fs/xfs/Kconfig b/fs/xfs/Kconfig
index ecebd3ebab1342..dc55bbf295208d 100644
--- a/fs/xfs/Kconfig
+++ b/fs/xfs/Kconfig
@@ -137,7 +137,7 @@ config XFS_BTREE_IN_MEM
 
 config XFS_ONLINE_SCRUB
 	bool "XFS online metadata check support"
-	default n
+	default y
 	depends on XFS_FS
 	depends on TMPFS && SHMEM
 	select XFS_LIVE_HOOKS
@@ -150,8 +150,6 @@ config XFS_ONLINE_SCRUB
 	  advantage here is to look for problems proactively so that
 	  they can be dealt with in a controlled manner.
 
-	  This feature is considered EXPERIMENTAL.  Use with caution!
-
 	  See the xfs_scrub man page in section 8 for additional information.
 
 	  If unsure, say N.
@@ -175,7 +173,7 @@ config XFS_ONLINE_SCRUB_STATS
 
 config XFS_ONLINE_REPAIR
 	bool "XFS online metadata repair support"
-	default n
+	default y
 	depends on XFS_FS && XFS_ONLINE_SCRUB
 	select XFS_BTREE_IN_MEM
 	help
@@ -186,8 +184,6 @@ config XFS_ONLINE_REPAIR
 	  formatted with secondary metadata, such as reverse mappings and inode
 	  parent pointers.
 
-	  This feature is considered EXPERIMENTAL.  Use with caution!
-
 	  See the xfs_scrub man page in section 8 for additional information.
 
 	  If unsure, say N.


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH 4/4] xfs: enable online fsck by default in Kconfig
  2025-09-03 15:00 ` [PATCH 4/4] xfs: enable online fsck by default in Kconfig Darrick J. Wong
@ 2025-09-03 18:07   ` Vlastimil Babka
  2025-09-03 19:38     ` Darrick J. Wong
  2025-09-04  2:43   ` [PATCH v1.1 " Darrick J. Wong
  1 sibling, 1 reply; 13+ messages in thread
From: Vlastimil Babka @ 2025-09-03 18:07 UTC (permalink / raw)
  To: Darrick J. Wong, cem; +Cc: linux-xfs

On 9/3/25 17:00, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@kernel.org>
> 
> Online fsck has been a part of upstream for over a year now without any
> serious problems.  Turn it on by default in time for the 2025 LTS
> kernel.
> 
> Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
> ---
>  fs/xfs/Kconfig |    8 ++------
>  1 file changed, 2 insertions(+), 6 deletions(-)
> 
> 
> diff --git a/fs/xfs/Kconfig b/fs/xfs/Kconfig
> index ecebd3ebab1342..dc55bbf295208d 100644
> --- a/fs/xfs/Kconfig
> +++ b/fs/xfs/Kconfig
> @@ -137,7 +137,7 @@ config XFS_BTREE_IN_MEM
>  
>  config XFS_ONLINE_SCRUB
>  	bool "XFS online metadata check support"
> -	default n
> +	default y
>  	depends on XFS_FS
>  	depends on TMPFS && SHMEM
>  	select XFS_LIVE_HOOKS
> @@ -150,8 +150,6 @@ config XFS_ONLINE_SCRUB
>  	  advantage here is to look for problems proactively so that
>  	  they can be dealt with in a controlled manner.
>  
> -	  This feature is considered EXPERIMENTAL.  Use with caution!
> -
>  	  See the xfs_scrub man page in section 8 for additional information.
>  
>  	  If unsure, say N.

Should it still say that with default y?

> @@ -175,7 +173,7 @@ config XFS_ONLINE_SCRUB_STATS
>  
>  config XFS_ONLINE_REPAIR
>  	bool "XFS online metadata repair support"
> -	default n
> +	default y
>  	depends on XFS_FS && XFS_ONLINE_SCRUB
>  	select XFS_BTREE_IN_MEM
>  	help
> @@ -186,8 +184,6 @@ config XFS_ONLINE_REPAIR
>  	  formatted with secondary metadata, such as reverse mappings and inode
>  	  parent pointers.
>  
> -	  This feature is considered EXPERIMENTAL.  Use with caution!
> -
>  	  See the xfs_scrub man page in section 8 for additional information.
>  
>  	  If unsure, say N.

Ditto

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 4/4] xfs: enable online fsck by default in Kconfig
  2025-09-03 18:07   ` Vlastimil Babka
@ 2025-09-03 19:38     ` Darrick J. Wong
  0 siblings, 0 replies; 13+ messages in thread
From: Darrick J. Wong @ 2025-09-03 19:38 UTC (permalink / raw)
  To: Vlastimil Babka; +Cc: cem, linux-xfs

On Wed, Sep 03, 2025 at 08:07:29PM +0200, Vlastimil Babka wrote:
> On 9/3/25 17:00, Darrick J. Wong wrote:
> > From: Darrick J. Wong <djwong@kernel.org>
> > 
> > Online fsck has been a part of upstream for over a year now without any
> > serious problems.  Turn it on by default in time for the 2025 LTS
> > kernel.
> > 
> > Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
> > ---
> >  fs/xfs/Kconfig |    8 ++------
> >  1 file changed, 2 insertions(+), 6 deletions(-)
> > 
> > 
> > diff --git a/fs/xfs/Kconfig b/fs/xfs/Kconfig
> > index ecebd3ebab1342..dc55bbf295208d 100644
> > --- a/fs/xfs/Kconfig
> > +++ b/fs/xfs/Kconfig
> > @@ -137,7 +137,7 @@ config XFS_BTREE_IN_MEM
> >  
> >  config XFS_ONLINE_SCRUB
> >  	bool "XFS online metadata check support"
> > -	default n
> > +	default y
> >  	depends on XFS_FS
> >  	depends on TMPFS && SHMEM
> >  	select XFS_LIVE_HOOKS
> > @@ -150,8 +150,6 @@ config XFS_ONLINE_SCRUB
> >  	  advantage here is to look for problems proactively so that
> >  	  they can be dealt with in a controlled manner.
> >  
> > -	  This feature is considered EXPERIMENTAL.  Use with caution!
> > -
> >  	  See the xfs_scrub man page in section 8 for additional information.
> >  
> >  	  If unsure, say N.
> 
> Should it still say that with default y?

I suppose not. :D

--D

> > @@ -175,7 +173,7 @@ config XFS_ONLINE_SCRUB_STATS
> >  
> >  config XFS_ONLINE_REPAIR
> >  	bool "XFS online metadata repair support"
> > -	default n
> > +	default y
> >  	depends on XFS_FS && XFS_ONLINE_SCRUB
> >  	select XFS_BTREE_IN_MEM
> >  	help
> > @@ -186,8 +184,6 @@ config XFS_ONLINE_REPAIR
> >  	  formatted with secondary metadata, such as reverse mappings and inode
> >  	  parent pointers.
> >  
> > -	  This feature is considered EXPERIMENTAL.  Use with caution!
> > -
> >  	  See the xfs_scrub man page in section 8 for additional information.
> >  
> >  	  If unsure, say N.
> 
> Ditto
> 

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v1.1 4/4] xfs: enable online fsck by default in Kconfig
  2025-09-03 15:00 ` [PATCH 4/4] xfs: enable online fsck by default in Kconfig Darrick J. Wong
  2025-09-03 18:07   ` Vlastimil Babka
@ 2025-09-04  2:43   ` Darrick J. Wong
  2025-09-05  8:39     ` Carlos Maiolino
  1 sibling, 1 reply; 13+ messages in thread
From: Darrick J. Wong @ 2025-09-04  2:43 UTC (permalink / raw)
  To: cem, vbabka; +Cc: linux-xfs

From: Darrick J. Wong <djwong@kernel.org>

Online fsck has been a part of upstream for over a year now without any
serious problems.  Turn it on by default in time for the 2025 LTS
kernel, and get rid of the "say N if unsure" messages for the default Y
options.

Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
---
v1.1: remove the "if unsure" statements
---
 fs/xfs/Kconfig |   14 ++------------
 1 file changed, 2 insertions(+), 12 deletions(-)

diff --git a/fs/xfs/Kconfig b/fs/xfs/Kconfig
index bd8c073ad251ed..7b341c9de36302 100644
--- a/fs/xfs/Kconfig
+++ b/fs/xfs/Kconfig
@@ -137,7 +137,7 @@ config XFS_BTREE_IN_MEM
 
 config XFS_ONLINE_SCRUB
 	bool "XFS online metadata check support"
-	default n
+	default y
 	depends on XFS_FS
 	depends on TMPFS && SHMEM
 	select XFS_LIVE_HOOKS
@@ -150,12 +150,8 @@ config XFS_ONLINE_SCRUB
 	  advantage here is to look for problems proactively so that
 	  they can be dealt with in a controlled manner.
 
-	  This feature is considered EXPERIMENTAL.  Use with caution!
-
 	  See the xfs_scrub man page in section 8 for additional information.
 
-	  If unsure, say N.
-
 config XFS_ONLINE_SCRUB_STATS
 	bool "XFS online metadata check usage data collection"
 	default y
@@ -171,11 +167,9 @@ config XFS_ONLINE_SCRUB_STATS
 
 	  Usage data are collected in /sys/kernel/debug/xfs/scrub.
 
-	  If unsure, say N.
-
 config XFS_ONLINE_REPAIR
 	bool "XFS online metadata repair support"
-	default n
+	default y
 	depends on XFS_FS && XFS_ONLINE_SCRUB
 	select XFS_BTREE_IN_MEM
 	help
@@ -186,12 +180,8 @@ config XFS_ONLINE_REPAIR
 	  formatted with secondary metadata, such as reverse mappings and inode
 	  parent pointers.
 
-	  This feature is considered EXPERIMENTAL.  Use with caution!
-
 	  See the xfs_scrub man page in section 8 for additional information.
 
-	  If unsure, say N.
-
 config XFS_WARN
 	bool "XFS Verbose Warnings"
 	depends on XFS_FS && !XFS_DEBUG

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/4] xfs: disable deprecated features by default in Kconfig
  2025-09-03 14:59 ` [PATCH 1/4] xfs: disable deprecated features by default in Kconfig Darrick J. Wong
@ 2025-09-05  8:30   ` Carlos Maiolino
  0 siblings, 0 replies; 13+ messages in thread
From: Carlos Maiolino @ 2025-09-05  8:30 UTC (permalink / raw)
  To: Darrick J. Wong; +Cc: linux-xfs

On Wed, Sep 03, 2025 at 07:59:52AM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@kernel.org>
> 
> We promised to turn off these old features by default in September 2025.
> Do so now.
> 
> Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
> ---
>  Documentation/admin-guide/xfs.rst |    5 ++---
>  fs/xfs/Kconfig                    |    8 ++++----
>  2 files changed, 6 insertions(+), 7 deletions(-)
> 
> 
> diff --git a/Documentation/admin-guide/xfs.rst b/Documentation/admin-guide/xfs.rst
> index a18328a5fb93be..693b09ca62922f 100644
> --- a/Documentation/admin-guide/xfs.rst
> +++ b/Documentation/admin-guide/xfs.rst
> @@ -253,9 +253,8 @@ latest version and try again.

Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>

> 
>  The deprecation will take place in two parts.  Support for mounting V4
>  filesystems can now be disabled at kernel build time via Kconfig option.
> -The option will default to yes until September 2025, at which time it
> -will be changed to default to no.  In September 2030, support will be
> -removed from the codebase entirely.
> +These options were changed to default to no in September 2025.  In
> +September 2030, support will be removed from the codebase entirely.
> 
>  Note: Distributors may choose to withdraw V4 format support earlier than
>  the dates listed above.
> diff --git a/fs/xfs/Kconfig b/fs/xfs/Kconfig
> index 065953475cf5eb..ecebd3ebab1342 100644
> --- a/fs/xfs/Kconfig
> +++ b/fs/xfs/Kconfig
> @@ -25,7 +25,7 @@ config XFS_FS
>  config XFS_SUPPORT_V4
>  	bool "Support deprecated V4 (crc=0) format"
>  	depends on XFS_FS
> -	default y
> +	default n
>  	help
>  	  The V4 filesystem format lacks certain features that are supported
>  	  by the V5 format, such as metadata checksumming, strengthened
> @@ -40,7 +40,7 @@ config XFS_SUPPORT_V4
>  	  filesystem is a V4 filesystem.  If no such string is found, please
>  	  upgrade xfsprogs to the latest version and try again.
> 
> -	  This option will become default N in September 2025.  Support for the
> +	  This option became default N in September 2025.  Support for the
>  	  V4 format will be removed entirely in September 2030.  Distributors
>  	  can say N here to withdraw support earlier.
> 
> @@ -50,7 +50,7 @@ config XFS_SUPPORT_V4
>  config XFS_SUPPORT_ASCII_CI
>  	bool "Support deprecated case-insensitive ascii (ascii-ci=1) format"
>  	depends on XFS_FS
> -	default y
> +	default n
>  	help
>  	  The ASCII case insensitivity filesystem feature only works correctly
>  	  on systems that have been coerced into using ISO 8859-1, and it does
> @@ -67,7 +67,7 @@ config XFS_SUPPORT_ASCII_CI
>  	  filesystem is a case-insensitive filesystem.  If no such string is
>  	  found, please upgrade xfsprogs to the latest version and try again.
> 
> -	  This option will become default N in September 2025.  Support for the
> +	  This option became default N in September 2025.  Support for the
>  	  feature will be removed entirely in September 2030.  Distributors
>  	  can say N here to withdraw support earlier.
> 
> 

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 2/4] xfs: remove deprecated mount options
  2025-09-03 15:00 ` [PATCH 2/4] xfs: remove deprecated mount options Darrick J. Wong
@ 2025-09-05  8:35   ` Carlos Maiolino
  2025-09-05 15:25     ` Darrick J. Wong
  0 siblings, 1 reply; 13+ messages in thread
From: Carlos Maiolino @ 2025-09-05  8:35 UTC (permalink / raw)
  To: Darrick J. Wong; +Cc: preichl, linux-xfs

On Wed, Sep 03, 2025 at 08:00:08AM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@kernel.org>
> 
> These four mount options were scheduled for removal in September 2025,
> so remove them now.
> 
> Cc: preichl@redhat.com
> Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
> ---
>  fs/xfs/xfs_mount.h                |   12 ++++---
>  Documentation/admin-guide/xfs.rst |   26 +---------------
>  fs/xfs/libxfs/xfs_attr_leaf.c     |   23 +++-----------
>  fs/xfs/libxfs/xfs_bmap.c          |   14 ++-------
>  fs/xfs/libxfs/xfs_ialloc.c        |    4 +-
>  fs/xfs/libxfs/xfs_sb.c            |    9 ++----
>  fs/xfs/xfs_icache.c               |    6 +---
>  fs/xfs/xfs_mount.c                |   13 --------
>  fs/xfs/xfs_super.c                |   60 +------------------------------------
>  9 files changed, 25 insertions(+), 142 deletions(-)
> 
> 
> diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h
> index 97de44c32272f2..f046d1215b043c 100644
> --- a/fs/xfs/xfs_mount.h
> +++ b/fs/xfs/xfs_mount.h
> @@ -363,7 +363,6 @@ typedef struct xfs_mount {
>  #define XFS_FEAT_EXTFLG		(1ULL << 7)	/* unwritten extents */
>  #define XFS_FEAT_ASCIICI	(1ULL << 8)	/* ASCII only case-insens. */
>  #define XFS_FEAT_LAZYSBCOUNT	(1ULL << 9)	/* Superblk counters */
> -#define XFS_FEAT_ATTR2		(1ULL << 10)	/* dynamic attr fork */
>  #define XFS_FEAT_PARENT		(1ULL << 11)	/* parent pointers */
>  #define XFS_FEAT_PROJID32	(1ULL << 12)	/* 32 bit project id */
>  #define XFS_FEAT_CRC		(1ULL << 13)	/* metadata CRCs */
> @@ -386,7 +385,6 @@ typedef struct xfs_mount {
> 
>  /* Mount features */
>  #define XFS_FEAT_NOLIFETIME	(1ULL << 47)	/* disable lifetime hints */
> -#define XFS_FEAT_NOATTR2	(1ULL << 48)	/* disable attr2 creation */
>  #define XFS_FEAT_NOALIGN	(1ULL << 49)	/* ignore alignment */
>  #define XFS_FEAT_ALLOCSIZE	(1ULL << 50)	/* user specified allocation size */
>  #define XFS_FEAT_LARGE_IOSIZE	(1ULL << 51)	/* report large preferred
> @@ -396,7 +394,6 @@ typedef struct xfs_mount {
>  #define XFS_FEAT_DISCARD	(1ULL << 54)	/* discard unused blocks */
>  #define XFS_FEAT_GRPID		(1ULL << 55)	/* group-ID assigned from directory */
>  #define XFS_FEAT_SMALL_INUMS	(1ULL << 56)	/* user wants 32bit inodes */
> -#define XFS_FEAT_IKEEP		(1ULL << 57)	/* keep empty inode clusters*/
>  #define XFS_FEAT_SWALLOC	(1ULL << 58)	/* stripe width allocation */
>  #define XFS_FEAT_FILESTREAMS	(1ULL << 59)	/* use filestreams allocator */
>  #define XFS_FEAT_DAX_ALWAYS	(1ULL << 60)	/* DAX always enabled */
> @@ -504,12 +501,17 @@ __XFS_HAS_V4_FEAT(align, ALIGN)
>  __XFS_HAS_V4_FEAT(logv2, LOGV2)
>  __XFS_HAS_V4_FEAT(extflg, EXTFLG)
>  __XFS_HAS_V4_FEAT(lazysbcount, LAZYSBCOUNT)
> -__XFS_ADD_V4_FEAT(attr2, ATTR2)
>  __XFS_ADD_V4_FEAT(projid32, PROJID32)
>  __XFS_HAS_V4_FEAT(v3inodes, V3INODES)
>  __XFS_HAS_V4_FEAT(crc, CRC)
>  __XFS_HAS_V4_FEAT(pquotino, PQUOTINO)
> 
> +static inline void xfs_add_attr2(struct xfs_mount *mp)
> +{
> +	if (IS_ENABLED(CONFIG_XFS_SUPPORT_V4))
> +		xfs_sb_version_addattr2(&mp->m_sb);
> +}
> +
>  /*
>   * Mount features
>   *
> @@ -517,7 +519,6 @@ __XFS_HAS_V4_FEAT(pquotino, PQUOTINO)
>   * bit inodes and read-only state, are kept as operational state rather than
>   * features.
>   */
> -__XFS_HAS_FEAT(noattr2, NOATTR2)
>  __XFS_HAS_FEAT(noalign, NOALIGN)
>  __XFS_HAS_FEAT(allocsize, ALLOCSIZE)
>  __XFS_HAS_FEAT(large_iosize, LARGE_IOSIZE)
> @@ -526,7 +527,6 @@ __XFS_HAS_FEAT(dirsync, DIRSYNC)
>  __XFS_HAS_FEAT(discard, DISCARD)
>  __XFS_HAS_FEAT(grpid, GRPID)
>  __XFS_HAS_FEAT(small_inums, SMALL_INUMS)
> -__XFS_HAS_FEAT(ikeep, IKEEP)
>  __XFS_HAS_FEAT(swalloc, SWALLOC)
>  __XFS_HAS_FEAT(filestreams, FILESTREAMS)
>  __XFS_HAS_FEAT(dax_always, DAX_ALWAYS)
> diff --git a/Documentation/admin-guide/xfs.rst b/Documentation/admin-guide/xfs.rst
> index 693b09ca62922f..7ad746a3e66c25 100644
> --- a/Documentation/admin-guide/xfs.rst
> +++ b/Documentation/admin-guide/xfs.rst
> @@ -34,22 +34,6 @@ When mounting an XFS filesystem, the following options are accepted.
>  	to the file. Specifying a fixed ``allocsize`` value turns off
>  	the dynamic behaviour.
> 
> -  attr2 or noattr2
> -	The options enable/disable an "opportunistic" improvement to
> -	be made in the way inline extended attributes are stored
> -	on-disk.  When the new form is used for the first time when
> -	``attr2`` is selected (either when setting or removing extended
> -	attributes) the on-disk superblock feature bit field will be
> -	updated to reflect this format being in use.
> -
> -	The default behaviour is determined by the on-disk feature
> -	bit indicating that ``attr2`` behaviour is active. If either
> -	mount option is set, then that becomes the new default used
> -	by the filesystem.
> -
> -	CRC enabled filesystems always use the ``attr2`` format, and so
> -	will reject the ``noattr2`` mount option if it is set.
> -
>    discard or nodiscard (default)
>  	Enable/disable the issuing of commands to let the block
>  	device reclaim space freed by the filesystem.  This is
> @@ -75,12 +59,6 @@ When mounting an XFS filesystem, the following options are accepted.
>  	across the entire filesystem rather than just on directories
>  	configured to use it.
> 
> -  ikeep or noikeep (default)
> -	When ``ikeep`` is specified, XFS does not delete empty inode
> -	clusters and keeps them around on disk.  When ``noikeep`` is
> -	specified, empty inode clusters are returned to the free
> -	space pool.
> -
>    inode32 or inode64 (default)
>  	When ``inode32`` is specified, it indicates that XFS limits
>  	inode creation to locations which will not result in inode
> @@ -267,8 +245,6 @@ Deprecated Mount Options
>  ============================    ================
>  Mounting with V4 filesystem     September 2030
>  Mounting ascii-ci filesystem    September 2030
> -ikeep/noikeep			September 2025
> -attr2/noattr2			September 2025
>  ============================    ================
> 
> 
> @@ -284,6 +260,8 @@ Removed Mount Options
>    osyncisdsync/osyncisosync	v4.0
>    barrier			v4.19
>    nobarrier			v4.19
> +  ikeep/noikeep			v6.18
> +  attr2/noattr2			v6.18
>  ===========================     =======
> 
>  sysctls
> diff --git a/fs/xfs/libxfs/xfs_attr_leaf.c b/fs/xfs/libxfs/xfs_attr_leaf.c
> index fddb55605e0cc6..47213e6023dd4b 100644
> --- a/fs/xfs/libxfs/xfs_attr_leaf.c
> +++ b/fs/xfs/libxfs/xfs_attr_leaf.c
> @@ -667,12 +667,8 @@ xfs_attr_shortform_bytesfit(
> 
>  	/*
>  	 * For attr2 we can try to move the forkoff if there is space in the
> -	 * literal area, but for the old format we are done if there is no
> -	 * space in the fixed attribute fork.
> +	 * literal area
>  	 */
> -	if (!xfs_has_attr2(mp))
> -		return 0;
> -
>  	dsize = dp->i_df.if_bytes;
> 
>  	switch (dp->i_df.if_format) {
> @@ -723,22 +719,16 @@ xfs_attr_shortform_bytesfit(
>  }
> 
>  /*
> - * 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.
> + * Switch on the ATTR2 superblock bit (implies also FEATURES2) unless
> + * on-disk version bit says it is already set
>   */
>  STATIC void
>  xfs_sbversion_add_attr2(
>  	struct xfs_mount	*mp,
>  	struct xfs_trans	*tp)
>  {
> -	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);
> @@ -889,7 +879,7 @@ xfs_attr_sf_removename(
>  	/*
>  	 * Fix up the start offset of the attribute fork
>  	 */
> -	if (totsize == sizeof(struct xfs_attr_sf_hdr) && xfs_has_attr2(mp) &&
> +	if (totsize == sizeof(struct xfs_attr_sf_hdr) &&
>  	    (dp->i_df.if_format != XFS_DINODE_FMT_BTREE) &&
>  	    !(args->op_flags & (XFS_DA_OP_ADDNAME | XFS_DA_OP_REPLACE)) &&
>  	    !xfs_has_parent(mp)) {
> @@ -900,7 +890,6 @@ xfs_attr_sf_removename(
>  		ASSERT(dp->i_forkoff);
>  		ASSERT(totsize > sizeof(struct xfs_attr_sf_hdr) ||
>  				(args->op_flags & XFS_DA_OP_ADDNAME) ||
> -				!xfs_has_attr2(mp) ||
>  				dp->i_df.if_format == XFS_DINODE_FMT_BTREE ||
>  				xfs_has_parent(mp));
>  		xfs_trans_log_inode(args->trans, dp,
> @@ -1040,8 +1029,7 @@ xfs_attr_shortform_allfit(
>  		bytes += xfs_attr_sf_entsize_byname(name_loc->namelen,
>  					be16_to_cpu(name_loc->valuelen));
>  	}
> -	if (xfs_has_attr2(dp->i_mount) &&
> -	    (dp->i_df.if_format != XFS_DINODE_FMT_BTREE) &&
> +	if ((dp->i_df.if_format != XFS_DINODE_FMT_BTREE) &&
>  	    (bytes == sizeof(struct xfs_attr_sf_hdr)))
>  		return -1;
>  	return xfs_attr_shortform_bytesfit(dp, bytes);
> @@ -1161,7 +1149,6 @@ xfs_attr3_leaf_to_shortform(
>  		 * this case.
>  		 */
>  		if (!(args->op_flags & XFS_DA_OP_REPLACE)) {
> -			ASSERT(xfs_has_attr2(dp->i_mount));
>  			ASSERT(dp->i_df.if_format != XFS_DINODE_FMT_BTREE);
>  			xfs_attr_fork_remove(dp, args->trans);
>  		}
> diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
> index d954f9b8071f4b..80bdb537fcf783 100644
> --- a/fs/xfs/libxfs/xfs_bmap.c
> +++ b/fs/xfs/libxfs/xfs_bmap.c
> @@ -997,8 +997,7 @@ xfs_bmap_add_attrfork_local(
>  static int
>  xfs_bmap_set_attrforkoff(
>  	struct xfs_inode	*ip,
> -	int			size,
> -	int			*version)
> +	int			size)
>  {
>  	int			default_size = xfs_default_attroffset(ip) >> 3;
> 
> @@ -1012,8 +1011,6 @@ xfs_bmap_set_attrforkoff(
>  		ip->i_forkoff = xfs_attr_shortform_bytesfit(ip, size);
>  		if (!ip->i_forkoff)
>  			ip->i_forkoff = default_size;
> -		else if (xfs_has_attr2(ip->i_mount) && version)
> -			*version = 2;
>  		break;
>  	default:
>  		ASSERT(0);
> @@ -1035,7 +1032,6 @@ xfs_bmap_add_attrfork(
>  	int			rsvd)		/* xact may use reserved blks */
>  {
>  	struct xfs_mount	*mp = tp->t_mountp;
> -	int			version = 1;	/* superblock attr version */
>  	int			logflags;	/* logging flags */
>  	int			error;		/* error return value */
> 
> @@ -1045,7 +1041,7 @@ xfs_bmap_add_attrfork(
>  	ASSERT(!xfs_inode_has_attr_fork(ip));
> 
>  	xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
> -	error = xfs_bmap_set_attrforkoff(ip, size, &version);
> +	error = xfs_bmap_set_attrforkoff(ip, size);
>  	if (error)
>  		return error;
> 
> @@ -1069,16 +1065,12 @@ xfs_bmap_add_attrfork(
>  		xfs_trans_log_inode(tp, ip, logflags);
>  	if (error)
>  		return error;
> -	if (!xfs_has_attr(mp) ||
> -	   (!xfs_has_attr2(mp) && version == 2)) {
> +	if (!xfs_has_attr(mp)) {
>  		bool log_sb = false;
> 
>  		spin_lock(&mp->m_sb_lock);
>  		if (!xfs_has_attr(mp)) {
>  			xfs_add_attr(mp);
> -			log_sb = true;
> -		}
> -		if (!xfs_has_attr2(mp) && version == 2) {
>  			xfs_add_attr2(mp);
>  			log_sb = true;
>  		}
> diff --git a/fs/xfs/libxfs/xfs_ialloc.c b/fs/xfs/libxfs/xfs_ialloc.c
> index 750111634d9f7b..5fefdd4fe75dbd 100644
> --- a/fs/xfs/libxfs/xfs_ialloc.c
> +++ b/fs/xfs/libxfs/xfs_ialloc.c
> @@ -2140,7 +2140,7 @@ xfs_difree_inobt(
>  	 * remove the chunk if the block size is large enough for multiple inode
>  	 * chunks (that might not be free).
>  	 */
> -	if (!xfs_has_ikeep(mp) && rec.ir_free == XFS_INOBT_ALL_FREE &&
> +	if (rec.ir_free == XFS_INOBT_ALL_FREE &&
>  	    mp->m_sb.sb_inopblock <= XFS_INODES_PER_CHUNK) {
>  		xic->deleted = true;
>  		xic->first_ino = xfs_agino_to_ino(pag, rec.ir_startino);
> @@ -2286,7 +2286,7 @@ xfs_difree_finobt(
>  	 * enough for multiple chunks. Leave the finobt record to remain in sync
>  	 * with the inobt.
>  	 */
> -	if (!xfs_has_ikeep(mp) && rec.ir_free == XFS_INOBT_ALL_FREE &&
> +	if (rec.ir_free == XFS_INOBT_ALL_FREE &&
>  	    mp->m_sb.sb_inopblock <= XFS_INODES_PER_CHUNK) {
>  		error = xfs_btree_delete(cur, &i);
>  		if (error)
> diff --git a/fs/xfs/libxfs/xfs_sb.c b/fs/xfs/libxfs/xfs_sb.c
> index 711e180f9ebb83..cdd16dd805d77c 100644
> --- a/fs/xfs/libxfs/xfs_sb.c
> +++ b/fs/xfs/libxfs/xfs_sb.c
> @@ -142,8 +142,6 @@ xfs_sb_version_to_features(
>  	if (sbp->sb_versionnum & XFS_SB_VERSION_MOREBITSBIT) {
>  		if (sbp->sb_features2 & XFS_SB_VERSION2_LAZYSBCOUNTBIT)
>  			features |= XFS_FEAT_LAZYSBCOUNT;
> -		if (sbp->sb_features2 & XFS_SB_VERSION2_ATTR2BIT)
> -			features |= XFS_FEAT_ATTR2;
>  		if (sbp->sb_features2 & XFS_SB_VERSION2_PROJID32BIT)
>  			features |= XFS_FEAT_PROJID32;
>  		if (sbp->sb_features2 & XFS_SB_VERSION2_FTYPE)
> @@ -155,7 +153,7 @@ xfs_sb_version_to_features(
> 
>  	/* Always on V5 features */
>  	features |= XFS_FEAT_ALIGN | XFS_FEAT_LOGV2 | XFS_FEAT_EXTFLG |
> -		    XFS_FEAT_LAZYSBCOUNT | XFS_FEAT_ATTR2 | XFS_FEAT_PROJID32 |
> +		    XFS_FEAT_LAZYSBCOUNT | XFS_FEAT_PROJID32 |
>  		    XFS_FEAT_V3INODES | XFS_FEAT_CRC | XFS_FEAT_PQUOTINO;
> 
>  	/* Optional V5 features */
> @@ -1524,7 +1522,8 @@ xfs_fs_geometry(
>  	geo->version = XFS_FSOP_GEOM_VERSION;
>  	geo->flags = XFS_FSOP_GEOM_FLAGS_NLINK |
>  		     XFS_FSOP_GEOM_FLAGS_DIRV2 |
> -		     XFS_FSOP_GEOM_FLAGS_EXTFLG;
> +		     XFS_FSOP_GEOM_FLAGS_EXTFLG |
> +		     XFS_FSOP_GEOM_FLAGS_ATTR2;
>  	if (xfs_has_attr(mp))
>  		geo->flags |= XFS_FSOP_GEOM_FLAGS_ATTR;
>  	if (xfs_has_quota(mp))
> @@ -1537,8 +1536,6 @@ xfs_fs_geometry(
>  		geo->flags |= XFS_FSOP_GEOM_FLAGS_DIRV2CI;
>  	if (xfs_has_lazysbcount(mp))
>  		geo->flags |= XFS_FSOP_GEOM_FLAGS_LAZYSB;
> -	if (xfs_has_attr2(mp))
> -		geo->flags |= XFS_FSOP_GEOM_FLAGS_ATTR2;
>  	if (xfs_has_projid32(mp))
>  		geo->flags |= XFS_FSOP_GEOM_FLAGS_PROJID32;
>  	if (xfs_has_crc(mp))
> diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c
> index 4cf7abe5014371..e44040206851fc 100644
> --- a/fs/xfs/xfs_icache.c
> +++ b/fs/xfs/xfs_icache.c
> @@ -646,8 +646,7 @@ xfs_iget_cache_miss(
>  		goto out_destroy;
> 
>  	/*
> -	 * For version 5 superblocks, if we are initialising a new inode and we
> -	 * are not utilising the XFS_FEAT_IKEEP inode cluster mode, we can
> +	 * For version 5 superblocks, if we are initialising a new inode, we
>  	 * simply build the new inode core with a random generation number.
>  	 *
>  	 * For version 4 (and older) superblocks, log recovery is dependent on
> @@ -655,8 +654,7 @@ xfs_iget_cache_miss(
>  	 * value and hence we must also read the inode off disk even when
>  	 * initializing new inodes.
>  	 */
> -	if (xfs_has_v3inodes(mp) &&
> -	    (flags & XFS_IGET_CREATE) && !xfs_has_ikeep(mp)) {
> +	if (xfs_has_v3inodes(mp) && (flags & XFS_IGET_CREATE)) {
>  		VFS_I(ip)->i_generation = get_random_u32();
>  	} else {
>  		struct xfs_buf		*bp;
> diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c
> index dc32c5e34d8176..0953f6ae94abc8 100644
> --- a/fs/xfs/xfs_mount.c
> +++ b/fs/xfs/xfs_mount.c
> @@ -1057,19 +1057,6 @@ xfs_mountfs(
>  	xfs_inodegc_start(mp);
>  	xfs_blockgc_start(mp);
> 
> -	/*
> -	 * Now that we've recovered any pending superblock feature bit
> -	 * additions, we can finish setting up the attr2 behaviour for the
> -	 * mount. The noattr2 option overrides the superblock flag, so only
> -	 * check the superblock feature flag if the mount option is not set.
> -	 */
> -	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;
> -	}
> -
>  	if (xfs_has_metadir(mp)) {
>  		error = xfs_mount_setup_metadir(mp);
>  		if (error)
> diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
> index bb0a82635a770d..77acb3e5a4eca1 100644
> --- a/fs/xfs/xfs_super.c
> +++ b/fs/xfs/xfs_super.c
> @@ -105,8 +105,8 @@ enum {
>  	Opt_logbufs, Opt_logbsize, Opt_logdev, Opt_rtdev,
>  	Opt_wsync, Opt_noalign, Opt_swalloc, Opt_sunit, Opt_swidth, Opt_nouuid,
>  	Opt_grpid, Opt_nogrpid, Opt_bsdgroups, Opt_sysvgroups,
> -	Opt_allocsize, Opt_norecovery, Opt_inode64, Opt_inode32, Opt_ikeep,
> -	Opt_noikeep, Opt_largeio, Opt_nolargeio, Opt_attr2, Opt_noattr2,
> +	Opt_allocsize, Opt_norecovery, Opt_inode64, Opt_inode32,
> +	Opt_largeio, Opt_nolargeio,
>  	Opt_filestreams, Opt_quota, Opt_noquota, Opt_usrquota, Opt_grpquota,
>  	Opt_prjquota, Opt_uquota, Opt_gquota, Opt_pquota,
>  	Opt_uqnoenforce, Opt_gqnoenforce, Opt_pqnoenforce, Opt_qnoenforce,
> @@ -133,12 +133,8 @@ static const struct fs_parameter_spec xfs_fs_parameters[] = {
>  	fsparam_flag("norecovery",	Opt_norecovery),
>  	fsparam_flag("inode64",		Opt_inode64),
>  	fsparam_flag("inode32",		Opt_inode32),
> -	fsparam_flag("ikeep",		Opt_ikeep),
> -	fsparam_flag("noikeep",		Opt_noikeep),
>  	fsparam_flag("largeio",		Opt_largeio),
>  	fsparam_flag("nolargeio",	Opt_nolargeio),
> -	fsparam_flag("attr2",		Opt_attr2),
> -	fsparam_flag("noattr2",		Opt_noattr2),
>  	fsparam_flag("filestreams",	Opt_filestreams),
>  	fsparam_flag("quota",		Opt_quota),
>  	fsparam_flag("noquota",		Opt_noquota),
> @@ -175,13 +171,11 @@ xfs_fs_show_options(
>  {
>  	static struct proc_xfs_info xfs_info_set[] = {
>  		/* the few simple ones we can get from the mount struct */
> -		{ 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" },
> @@ -1087,15 +1081,6 @@ xfs_finish_flags(
>  		}
>  	}
> 

Looks good.

I'm sure you already have it planned, but just being paranoid... Will
you consider updating xfsprogs too? :)

Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>

> -	/*
> -	 * V5 filesystems always use attr2 format for attributes.
> -	 */
> -	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;
> -	}
> -
>  	/*
>  	 * prohibit r/w mounts of read-only filesystems
>  	 */
> @@ -1542,22 +1527,6 @@ xfs_fs_parse_param(
>  		return 0;
>  #endif
>  	/* Following mount options will be removed in September 2025 */
> -	case Opt_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_FEAT_IKEEP, false);
> -		parsing_mp->m_features &= ~XFS_FEAT_IKEEP;
> -		return 0;
> -	case Opt_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_FEAT_NOATTR2, true);
> -		parsing_mp->m_features |= XFS_FEAT_NOATTR2;
> -		return 0;
>  	case Opt_max_open_zones:
>  		parsing_mp->m_max_open_zones = result.uint_32;
>  		return 0;
> @@ -1593,16 +1562,6 @@ xfs_fs_validate_params(
>  		return -EINVAL;
>  	}
> 
> -	/*
> -	 * 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 (xfs_has_noalign(mp) && (mp->m_dalign || mp->m_swidth)) {
>  		xfs_warn(mp,
>  	"sunit and swidth options incompatible with the noalign option");
> @@ -2177,21 +2136,6 @@ xfs_fs_reconfigure(
>  	if (error)
>  		return error;
> 
> -	/* attr2 -> noattr2 */
> -	if (xfs_has_noattr2(new_mp)) {
> -		if (xfs_has_crc(mp)) {
> -			xfs_warn(mp,
> -			"attr2 is always enabled for a V5 filesystem - can't be changed.");
> -			return -EINVAL;
> -		}
> -		mp->m_features &= ~XFS_FEAT_ATTR2;
> -		mp->m_features |= XFS_FEAT_NOATTR2;
> -	} else if (xfs_has_attr2(new_mp)) {
> -		/* noattr2 -> attr2 */
> -		mp->m_features &= ~XFS_FEAT_NOATTR2;
> -		mp->m_features |= XFS_FEAT_ATTR2;
> -	}
> -
>  	/* Validate new max_atomic_write option before making other changes */
>  	if (mp->m_awu_max_bytes != new_mp->m_awu_max_bytes) {
>  		error = xfs_set_max_atomic_write_opt(mp,
> 

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 3/4] xfs: remove deprecated sysctl knobs
  2025-09-03 15:00 ` [PATCH 3/4] xfs: remove deprecated sysctl knobs Darrick J. Wong
@ 2025-09-05  8:36   ` Carlos Maiolino
  0 siblings, 0 replies; 13+ messages in thread
From: Carlos Maiolino @ 2025-09-05  8:36 UTC (permalink / raw)
  To: Darrick J. Wong; +Cc: linux-xfs

On Wed, Sep 03, 2025 at 08:00:24AM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@kernel.org>
> 
> These sysctl knobs were scheduled for removal in September 2025.  That
> time has come, so remove them.
> 
> Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
> ---
>  fs/xfs/xfs_linux.h                |    2 --
>  fs/xfs/xfs_sysctl.h               |    3 ---
>  Documentation/admin-guide/xfs.rst |   26 ++++----------------------
>  fs/xfs/libxfs/xfs_inode_util.c    |   11 -----------
>  fs/xfs/xfs_globals.c              |    2 --
>  fs/xfs/xfs_iops.c                 |   12 +++++-------
>  fs/xfs/xfs_sysctl.c               |   29 +----------------------------
>  7 files changed, 10 insertions(+), 75 deletions(-)
> 
> 
> diff --git a/fs/xfs/xfs_linux.h b/fs/xfs/xfs_linux.h
> index 9a2221b4aa21ed..4dd747bdbccab2 100644
> --- a/fs/xfs/xfs_linux.h
> +++ b/fs/xfs/xfs_linux.h
> @@ -89,8 +89,6 @@ typedef __u32			xfs_nlink_t;
>  #undef XFS_NATIVE_HOST
>  #endif
> 
> -#define irix_sgid_inherit	xfs_params.sgid_inherit.val
> -#define irix_symlink_mode	xfs_params.symlink_mode.val

R.I.P Irix....

Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>


>  #define xfs_panic_mask		xfs_params.panic_mask.val
>  #define xfs_error_level		xfs_params.error_level.val
>  #define xfs_syncd_centisecs	xfs_params.syncd_timer.val
> diff --git a/fs/xfs/xfs_sysctl.h b/fs/xfs/xfs_sysctl.h
> index 51646f066c4f7d..ed9d896079c1a8 100644
> --- a/fs/xfs/xfs_sysctl.h
> +++ b/fs/xfs/xfs_sysctl.h
> @@ -19,9 +19,6 @@ typedef struct xfs_sysctl_val {
>  } xfs_sysctl_val_t;
> 
>  typedef struct xfs_param {
> -	xfs_sysctl_val_t sgid_inherit;	/* Inherit S_ISGID if process' GID is
> -					 * not a member of parent dir GID. */
> -	xfs_sysctl_val_t symlink_mode;	/* Link creat mode affected by umask */
>  	xfs_sysctl_val_t panic_mask;	/* bitmask to cause panic on errors. */
>  	xfs_sysctl_val_t error_level;	/* Degree of reporting for problems  */
>  	xfs_sysctl_val_t syncd_timer;	/* Interval between xfssyncd wakeups */
> diff --git a/Documentation/admin-guide/xfs.rst b/Documentation/admin-guide/xfs.rst
> index 7ad746a3e66c25..d6f531f2c0e694 100644
> --- a/Documentation/admin-guide/xfs.rst
> +++ b/Documentation/admin-guide/xfs.rst
> @@ -289,9 +289,6 @@ The following sysctls are available for the XFS filesystem:
>  	removes unused preallocation from clean inodes and releases
>  	the unused space back to the free pool.
> 
> -  fs.xfs.speculative_cow_prealloc_lifetime
> -	This is an alias for speculative_prealloc_lifetime.
> -
>    fs.xfs.error_level		(Min: 0  Default: 3  Max: 11)
>  	A volume knob for error reporting when internal errors occur.
>  	This will generate detailed messages & backtraces for filesystem
> @@ -318,17 +315,6 @@ The following sysctls are available for the XFS filesystem:
> 
>  	This option is intended for debugging only.
> 
> -  fs.xfs.irix_symlink_mode	(Min: 0  Default: 0  Max: 1)
> -	Controls whether symlinks are created with mode 0777 (default)
> -	or whether their mode is affected by the umask (irix mode).
> -
> -  fs.xfs.irix_sgid_inherit	(Min: 0  Default: 0  Max: 1)
> -	Controls files created in SGID directories.
> -	If the group ID of the new file does not match the effective group
> -	ID or one of the supplementary group IDs of the parent dir, the
> -	ISGID bit is cleared if the irix_sgid_inherit compatibility sysctl
> -	is set.
> -
>    fs.xfs.inherit_sync		(Min: 0  Default: 1  Max: 1)
>  	Setting this to "1" will cause the "sync" flag set
>  	by the **xfs_io(8)** chattr command on a directory to be
> @@ -364,14 +350,7 @@ The following sysctls are available for the XFS filesystem:
>  Deprecated Sysctls
>  ==================
> 
> -===========================================     ================
> -  Name                                          Removal Schedule
> -===========================================     ================
> -fs.xfs.irix_sgid_inherit                        September 2025
> -fs.xfs.irix_symlink_mode                        September 2025
> -fs.xfs.speculative_cow_prealloc_lifetime        September 2025
> -===========================================     ================
> -
> +None currently.
> 
>  Removed Sysctls
>  ===============
> @@ -381,6 +360,9 @@ Removed Sysctls
>  =============================	=======
>    fs.xfs.xfsbufd_centisec	v4.0
>    fs.xfs.age_buffer_centisecs	v4.0
> +  fs.xfs.irix_symlink_mode      v6.18
> +  fs.xfs.irix_sgid_inherit      v6.18
> +  fs.xfs.speculative_cow_prealloc_lifetime      v6.18
>  =============================	=======
> 
>  Error handling
> diff --git a/fs/xfs/libxfs/xfs_inode_util.c b/fs/xfs/libxfs/xfs_inode_util.c
> index 48fe49a5f050f3..309ce6dd555383 100644
> --- a/fs/xfs/libxfs/xfs_inode_util.c
> +++ b/fs/xfs/libxfs/xfs_inode_util.c
> @@ -299,17 +299,6 @@ xfs_inode_init(
>  		} else {
>  			inode_init_owner(args->idmap, inode, dir, args->mode);
>  		}
> -
> -		/*
> -		 * If the group ID of the new file does not match the effective
> -		 * group ID or one of the supplementary group IDs, the S_ISGID
> -		 * bit is cleared (and only if the irix_sgid_inherit
> -		 * compatibility variable is set).
> -		 */
> -		if (irix_sgid_inherit && (inode->i_mode & S_ISGID) &&
> -		    !vfsgid_in_group_p(i_gid_into_vfsgid(args->idmap, inode)))
> -			inode->i_mode &= ~S_ISGID;
> -
>  		ip->i_projid = xfs_get_initial_prid(pip);
>  	}
> 
> diff --git a/fs/xfs/xfs_globals.c b/fs/xfs/xfs_globals.c
> index f6f628c01febaf..566fd663c95bba 100644
> --- a/fs/xfs/xfs_globals.c
> +++ b/fs/xfs/xfs_globals.c
> @@ -14,8 +14,6 @@
>   */
>  xfs_param_t xfs_params = {
>  			  /*	MIN		DFLT		MAX	*/
> -	.sgid_inherit	= {	0,		0,		1	},
> -	.symlink_mode	= {	0,		0,		1	},
>  	.panic_mask	= {	0,		0,		XFS_PTAG_MASK},
>  	.error_level	= {	0,		3,		11	},
>  	.syncd_timer	= {	1*100,		30*100,		7200*100},
> diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c
> index 603effabe1ee12..afd041e28bb26a 100644
> --- a/fs/xfs/xfs_iops.c
> +++ b/fs/xfs/xfs_iops.c
> @@ -431,14 +431,12 @@ xfs_vn_symlink(
>  	struct dentry		*dentry,
>  	const char		*symname)
>  {
> -	struct inode	*inode;
> -	struct xfs_inode *cip = NULL;
> -	struct xfs_name	name;
> -	int		error;
> -	umode_t		mode;
> +	struct inode		*inode;
> +	struct xfs_inode	*cip = NULL;
> +	struct xfs_name		name;
> +	int			error;
> +	umode_t			mode = S_IFLNK | S_IRWXUGO;
> 
> -	mode = S_IFLNK |
> -		(irix_symlink_mode ? 0777 & ~current_umask() : S_IRWXUGO);
>  	error = xfs_dentry_mode_to_name(&name, dentry, mode);
>  	if (unlikely(error))
>  		goto out;
> diff --git a/fs/xfs/xfs_sysctl.c b/fs/xfs/xfs_sysctl.c
> index 751dc74a30671a..9918f14b4874fd 100644
> --- a/fs/xfs/xfs_sysctl.c
> +++ b/fs/xfs/xfs_sysctl.c
> @@ -50,7 +50,7 @@ xfs_panic_mask_proc_handler(
>  }
>  #endif /* CONFIG_PROC_FS */
> 
> -STATIC int
> +static inline int
>  xfs_deprecated_dointvec_minmax(
>  	const struct ctl_table	*ctl,
>  	int			write,
> @@ -67,24 +67,6 @@ xfs_deprecated_dointvec_minmax(
>  }
> 
>  static const struct ctl_table xfs_table[] = {
> -	{
> -		.procname	= "irix_sgid_inherit",
> -		.data		= &xfs_params.sgid_inherit.val,
> -		.maxlen		= sizeof(int),
> -		.mode		= 0644,
> -		.proc_handler	= xfs_deprecated_dointvec_minmax,
> -		.extra1		= &xfs_params.sgid_inherit.min,
> -		.extra2		= &xfs_params.sgid_inherit.max
> -	},
> -	{
> -		.procname	= "irix_symlink_mode",
> -		.data		= &xfs_params.symlink_mode.val,
> -		.maxlen		= sizeof(int),
> -		.mode		= 0644,
> -		.proc_handler	= xfs_deprecated_dointvec_minmax,
> -		.extra1		= &xfs_params.symlink_mode.min,
> -		.extra2		= &xfs_params.symlink_mode.max
> -	},
>  	{
>  		.procname	= "panic_mask",
>  		.data		= &xfs_params.panic_mask.val,
> @@ -185,15 +167,6 @@ static const struct ctl_table xfs_table[] = {
>  		.extra1		= &xfs_params.blockgc_timer.min,
>  		.extra2		= &xfs_params.blockgc_timer.max,
>  	},
> -	{
> -		.procname	= "speculative_cow_prealloc_lifetime",
> -		.data		= &xfs_params.blockgc_timer.val,
> -		.maxlen		= sizeof(int),
> -		.mode		= 0644,
> -		.proc_handler	= xfs_deprecated_dointvec_minmax,
> -		.extra1		= &xfs_params.blockgc_timer.min,
> -		.extra2		= &xfs_params.blockgc_timer.max,
> -	},
>  	/* please keep this the last entry */
>  #ifdef CONFIG_PROC_FS
>  	{
> 
> 

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v1.1 4/4] xfs: enable online fsck by default in Kconfig
  2025-09-04  2:43   ` [PATCH v1.1 " Darrick J. Wong
@ 2025-09-05  8:39     ` Carlos Maiolino
  0 siblings, 0 replies; 13+ messages in thread
From: Carlos Maiolino @ 2025-09-05  8:39 UTC (permalink / raw)
  To: Darrick J. Wong; +Cc: vbabka, linux-xfs

On Wed, Sep 03, 2025 at 07:43:36PM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@kernel.org>
> 
> Online fsck has been a part of upstream for over a year now without any
> serious problems.  Turn it on by default in time for the 2025 LTS
> kernel, and get rid of the "say N if unsure" messages for the default Y
> options.
> 
> Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
> ---
> v1.1: remove the "if unsure" statements
> ---
>  fs/xfs/Kconfig |   14 ++------------
>  1 file changed, 2 insertions(+), 12 deletions(-)
> 

Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>


> diff --git a/fs/xfs/Kconfig b/fs/xfs/Kconfig
> index bd8c073ad251ed..7b341c9de36302 100644
> --- a/fs/xfs/Kconfig
> +++ b/fs/xfs/Kconfig
> @@ -137,7 +137,7 @@ config XFS_BTREE_IN_MEM
> 
>  config XFS_ONLINE_SCRUB
>  	bool "XFS online metadata check support"
> -	default n
> +	default y
>  	depends on XFS_FS
>  	depends on TMPFS && SHMEM
>  	select XFS_LIVE_HOOKS
> @@ -150,12 +150,8 @@ config XFS_ONLINE_SCRUB
>  	  advantage here is to look for problems proactively so that
>  	  they can be dealt with in a controlled manner.
> 
> -	  This feature is considered EXPERIMENTAL.  Use with caution!
> -
>  	  See the xfs_scrub man page in section 8 for additional information.
> 
> -	  If unsure, say N.
> -
>  config XFS_ONLINE_SCRUB_STATS
>  	bool "XFS online metadata check usage data collection"
>  	default y
> @@ -171,11 +167,9 @@ config XFS_ONLINE_SCRUB_STATS
> 
>  	  Usage data are collected in /sys/kernel/debug/xfs/scrub.
> 
> -	  If unsure, say N.
> -
>  config XFS_ONLINE_REPAIR
>  	bool "XFS online metadata repair support"
> -	default n
> +	default y
>  	depends on XFS_FS && XFS_ONLINE_SCRUB
>  	select XFS_BTREE_IN_MEM
>  	help
> @@ -186,12 +180,8 @@ config XFS_ONLINE_REPAIR
>  	  formatted with secondary metadata, such as reverse mappings and inode
>  	  parent pointers.
> 
> -	  This feature is considered EXPERIMENTAL.  Use with caution!
> -
>  	  See the xfs_scrub man page in section 8 for additional information.
> 
> -	  If unsure, say N.
> -
>  config XFS_WARN
>  	bool "XFS Verbose Warnings"
>  	depends on XFS_FS && !XFS_DEBUG

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 2/4] xfs: remove deprecated mount options
  2025-09-05  8:35   ` Carlos Maiolino
@ 2025-09-05 15:25     ` Darrick J. Wong
  0 siblings, 0 replies; 13+ messages in thread
From: Darrick J. Wong @ 2025-09-05 15:25 UTC (permalink / raw)
  To: Carlos Maiolino; +Cc: preichl, linux-xfs

On Fri, Sep 05, 2025 at 10:35:00AM +0200, Carlos Maiolino wrote:
> On Wed, Sep 03, 2025 at 08:00:08AM -0700, Darrick J. Wong wrote:
> > From: Darrick J. Wong <djwong@kernel.org>
> > 
> > These four mount options were scheduled for removal in September 2025,
> > so remove them now.
> > 
> > Cc: preichl@redhat.com
> > Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
> > ---
> >  fs/xfs/xfs_mount.h                |   12 ++++---
> >  Documentation/admin-guide/xfs.rst |   26 +---------------
> >  fs/xfs/libxfs/xfs_attr_leaf.c     |   23 +++-----------
> >  fs/xfs/libxfs/xfs_bmap.c          |   14 ++-------
> >  fs/xfs/libxfs/xfs_ialloc.c        |    4 +-
> >  fs/xfs/libxfs/xfs_sb.c            |    9 ++----
> >  fs/xfs/xfs_icache.c               |    6 +---
> >  fs/xfs/xfs_mount.c                |   13 --------
> >  fs/xfs/xfs_super.c                |   60 +------------------------------------
> >  9 files changed, 25 insertions(+), 142 deletions(-)
> > 
> > 

<snip>

> Looks good.
> 
> I'm sure you already have it planned, but just being paranoid... Will
> you consider updating xfsprogs too? :)

Yes, I'll send that for xfsprogs 6.18.  I think that's all just manpage
updates + libxfs sync.

--D

> Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
> 
> > -	/*
> > -	 * V5 filesystems always use attr2 format for attributes.
> > -	 */
> > -	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;
> > -	}
> > -
> >  	/*
> >  	 * prohibit r/w mounts of read-only filesystems
> >  	 */
> > @@ -1542,22 +1527,6 @@ xfs_fs_parse_param(
> >  		return 0;
> >  #endif
> >  	/* Following mount options will be removed in September 2025 */
> > -	case Opt_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_FEAT_IKEEP, false);
> > -		parsing_mp->m_features &= ~XFS_FEAT_IKEEP;
> > -		return 0;
> > -	case Opt_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_FEAT_NOATTR2, true);
> > -		parsing_mp->m_features |= XFS_FEAT_NOATTR2;
> > -		return 0;
> >  	case Opt_max_open_zones:
> >  		parsing_mp->m_max_open_zones = result.uint_32;
> >  		return 0;
> > @@ -1593,16 +1562,6 @@ xfs_fs_validate_params(
> >  		return -EINVAL;
> >  	}
> > 
> > -	/*
> > -	 * 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 (xfs_has_noalign(mp) && (mp->m_dalign || mp->m_swidth)) {
> >  		xfs_warn(mp,
> >  	"sunit and swidth options incompatible with the noalign option");
> > @@ -2177,21 +2136,6 @@ xfs_fs_reconfigure(
> >  	if (error)
> >  		return error;
> > 
> > -	/* attr2 -> noattr2 */
> > -	if (xfs_has_noattr2(new_mp)) {
> > -		if (xfs_has_crc(mp)) {
> > -			xfs_warn(mp,
> > -			"attr2 is always enabled for a V5 filesystem - can't be changed.");
> > -			return -EINVAL;
> > -		}
> > -		mp->m_features &= ~XFS_FEAT_ATTR2;
> > -		mp->m_features |= XFS_FEAT_NOATTR2;
> > -	} else if (xfs_has_attr2(new_mp)) {
> > -		/* noattr2 -> attr2 */
> > -		mp->m_features &= ~XFS_FEAT_NOATTR2;
> > -		mp->m_features |= XFS_FEAT_ATTR2;
> > -	}
> > -
> >  	/* Validate new max_atomic_write option before making other changes */
> >  	if (mp->m_awu_max_bytes != new_mp->m_awu_max_bytes) {
> >  		error = xfs_set_max_atomic_write_opt(mp,
> > 
> 

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2025-09-05 15:25 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-03 14:59 [PATCHSET] xfs: kconfig and feature changes for 2025 LTS Darrick J. Wong
2025-09-03 14:59 ` [PATCH 1/4] xfs: disable deprecated features by default in Kconfig Darrick J. Wong
2025-09-05  8:30   ` Carlos Maiolino
2025-09-03 15:00 ` [PATCH 2/4] xfs: remove deprecated mount options Darrick J. Wong
2025-09-05  8:35   ` Carlos Maiolino
2025-09-05 15:25     ` Darrick J. Wong
2025-09-03 15:00 ` [PATCH 3/4] xfs: remove deprecated sysctl knobs Darrick J. Wong
2025-09-05  8:36   ` Carlos Maiolino
2025-09-03 15:00 ` [PATCH 4/4] xfs: enable online fsck by default in Kconfig Darrick J. Wong
2025-09-03 18:07   ` Vlastimil Babka
2025-09-03 19:38     ` Darrick J. Wong
2025-09-04  2:43   ` [PATCH v1.1 " Darrick J. Wong
2025-09-05  8:39     ` Carlos Maiolino

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox