> xfsprogs: Add mkfs option to create filesystem with large extent > counters This ought to be shorter and more direct about this being an mkfs patch: "mkfs: add option to create filesystem with large extent counters" On Fri, Jan 21, 2022 at 10:50:17AM +0530, Chandan Babu R wrote: > Enabling nrext64 option on mkfs.xfs command line extends the maximum values of > inode data and attr fork extent counters to 2^48 - 1 and 2^32 - 1 > respectively. This also sets the XFS_SB_FEAT_INCOMPAT_NREXT64 incompat flag > on the superblock preventing older kernels from mounting such a filesystem. > > Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx> > Signed-off-by: Chandan Babu R <chandan.babu@xxxxxxxxxx> > --- > man/man8/mkfs.xfs.8.in | 7 +++++++ > mkfs/lts_4.19.conf | 1 + > mkfs/lts_5.10.conf | 1 + > mkfs/lts_5.15.conf | 1 + > mkfs/lts_5.4.conf | 1 + > mkfs/xfs_mkfs.c | 23 +++++++++++++++++++++++ > 6 files changed, 34 insertions(+) > > diff --git a/man/man8/mkfs.xfs.8.in b/man/man8/mkfs.xfs.8.in > index a3526753..7d764f19 100644 > --- a/man/man8/mkfs.xfs.8.in > +++ b/man/man8/mkfs.xfs.8.in > @@ -647,6 +647,13 @@ space over time such that no free extents are large enough to > accommodate a chunk of 64 inodes. Without this feature enabled, inode > allocations can fail with out of space errors under severe fragmented > free space conditions. > +.TP > +.BI nrext64[= value] > +Extend maximum values of inode data and attr fork extent counters from 2^31 - > +1 and 2^15 - 1 to 2^48 - 1 and 2^32 - 1 respectively. If the value is > +omitted, 1 is assumed. This feature is disabled by default. This feature is > +only available for filesystems formatted with -m crc=1. > +.TP > .RE > .PP > .PD 0 > diff --git a/mkfs/lts_4.19.conf b/mkfs/lts_4.19.conf > index d21fcb7e..751be45e 100644 > --- a/mkfs/lts_4.19.conf > +++ b/mkfs/lts_4.19.conf > @@ -2,6 +2,7 @@ > # kernel was released at the end of 2018. > > [metadata] > +nrext64=0 > bigtime=0 > crc=1 > finobt=1 > diff --git a/mkfs/lts_5.10.conf b/mkfs/lts_5.10.conf > index ac00960e..a1c991ce 100644 > --- a/mkfs/lts_5.10.conf > +++ b/mkfs/lts_5.10.conf > @@ -2,6 +2,7 @@ > # kernel was released at the end of 2020. > > [metadata] > +nrext64=0 > bigtime=0 > crc=1 > finobt=1 > diff --git a/mkfs/lts_5.15.conf b/mkfs/lts_5.15.conf > index 32082958..d751f4c4 100644 > --- a/mkfs/lts_5.15.conf > +++ b/mkfs/lts_5.15.conf > @@ -2,6 +2,7 @@ > # kernel was released at the end of 2021. > > [metadata] > +nrext64=0 > bigtime=1 > crc=1 > finobt=1 > diff --git a/mkfs/lts_5.4.conf b/mkfs/lts_5.4.conf > index dd60b9f1..7e8a0ff0 100644 > --- a/mkfs/lts_5.4.conf > +++ b/mkfs/lts_5.4.conf > @@ -2,6 +2,7 @@ > # kernel was released at the end of 2019. > > [metadata] > +nrext64=0 > bigtime=0 > crc=1 > finobt=1 > diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c > index 96682f9a..28aca7b0 100644 > --- a/mkfs/xfs_mkfs.c > +++ b/mkfs/xfs_mkfs.c > @@ -79,6 +79,7 @@ enum { > I_ATTR, > I_PROJID32BIT, > I_SPINODES, > + I_NREXT64, > I_MAX_OPTS, > }; > > @@ -433,6 +434,7 @@ static struct opt_params iopts = { > [I_ATTR] = "attr", > [I_PROJID32BIT] = "projid32bit", > [I_SPINODES] = "sparse", > + [I_NREXT64] = "nrext64", > }, > .subopt_params = { > { .index = I_ALIGN, > @@ -481,6 +483,12 @@ static struct opt_params iopts = { > .maxval = 1, > .defaultval = 1, > }, > + { .index = I_NREXT64, > + .conflicts = { { NULL, LAST_CONFLICT } }, > + .minval = 0, > + .maxval = 1, > + .defaultval = 1, > + } > }, > }; > > @@ -805,6 +813,7 @@ struct sb_feat_args { > bool bigtime; /* XFS_SB_FEAT_INCOMPAT_BIGTIME */ > bool nodalign; > bool nortalign; > + bool nrext64; > }; > > struct cli_params { > @@ -1595,6 +1604,9 @@ inode_opts_parser( > case I_SPINODES: > cli->sb_feat.spinodes = getnum(value, opts, subopt); > break; > + case I_NREXT64: > + cli->sb_feat.nrext64 = getnum(value, opts, subopt); > + break; > default: > return -EINVAL; > } > @@ -2172,6 +2184,14 @@ _("timestamps later than 2038 not supported without CRC support\n")); > usage(); > } > cli->sb_feat.bigtime = false; > + > + if (cli->sb_feat.nrext64 && > + cli_opt_set(&iopts, I_NREXT64)) { > + fprintf(stderr, Nit: second line of if test has the same indentation level as the first line of the if body. With those two things fixed, Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx> --D > +_("64 bit extent count not supported without CRC support\n")); > + usage(); > + } > + cli->sb_feat.nrext64 = false; > } > > if (!cli->sb_feat.finobt) { > @@ -3164,6 +3184,8 @@ sb_set_features( > sbp->sb_features_incompat |= XFS_SB_FEAT_INCOMPAT_SPINODES; > } > > + if (fp->nrext64) > + sbp->sb_features_incompat |= XFS_SB_FEAT_INCOMPAT_NREXT64; > } > > /* > @@ -3875,6 +3897,7 @@ main( > .nodalign = false, > .nortalign = false, > .bigtime = true, > + .nrext64 = false, > /* > * When we decide to enable a new feature by default, > * please remember to update the mkfs conf files. > -- > 2.30.2 >