Re: [PATCH 2/4] xfs: remove deprecated mount options

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Sep 03, 2025 at 08:00:08AM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@xxxxxxxxxx>
> 
> These four mount options were scheduled for removal in September 2025,
> so remove them now.
> 
> Cc: preichl@xxxxxxxxxx
> Signed-off-by: "Darrick J. Wong" <djwong@xxxxxxxxxx>
> ---
>  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@xxxxxxxxxx>

> -	/*
> -	 * 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,
> 




[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux