mirror of https://github.com/torvalds/linux.git
xfs: remove deprecated mount options
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> Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
This commit is contained in:
parent
f69260511c
commit
b9a176e541
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue