From: Allison Henderson Date: Tue, 9 Jan 2024 17:39:26 +0000 (-0800) Subject: mkfs: enable formatting with parent pointers X-Git-Tag: xfs-zoned-old-2024-06-10~342 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=c98f24ee9f646aa718199a78b92c2c74c46616c9;p=users%2Fhch%2Fxfsprogs.git mkfs: enable formatting with parent pointers Enable parent pointer support in mkfs via the '-n parent' parameter. Signed-off-by: Allison Henderson Reviewed-by: Darrick J. Wong [djwong: move the no-V4 filesystem check to join the rest] Signed-off-by: Darrick J. Wong --- diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 9bfd582b2..ee3264365 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -114,6 +114,7 @@ enum { N_SIZE = 0, N_VERSION, N_FTYPE, + N_PARENT, N_MAX_OPTS, }; @@ -656,6 +657,7 @@ static struct opt_params nopts = { [N_SIZE] = "size", [N_VERSION] = "version", [N_FTYPE] = "ftype", + [N_PARENT] = "parent", [N_MAX_OPTS] = NULL, }, .subopt_params = { @@ -679,6 +681,14 @@ static struct opt_params nopts = { .maxval = 1, .defaultval = 1, }, + { .index = N_PARENT, + .conflicts = { { NULL, LAST_CONFLICT } }, + .minval = 0, + .maxval = 1, + .defaultval = 1, + }, + + }, }; @@ -1040,7 +1050,7 @@ usage( void ) sunit=value|su=num,sectsize=num,lazy-count=0|1,\n\ concurrency=num]\n\ /* label */ [-L label (maximum 12 characters)]\n\ -/* naming */ [-n size=num,version=2|ci,ftype=0|1]\n\ +/* naming */ [-n size=num,version=2|ci,ftype=0|1,parent=0|1]]\n\ /* no-op info only */ [-N]\n\ /* prototype file */ [-p fname]\n\ /* quiet */ [-q]\n\ @@ -1878,6 +1888,9 @@ naming_opts_parser( case N_FTYPE: cli->sb_feat.dirftype = getnum(value, opts, subopt); break; + case N_PARENT: + cli->sb_feat.parent_pointers = getnum(value, &nopts, N_PARENT); + break; default: return -EINVAL; } @@ -2385,6 +2398,14 @@ _("exchange-range not supported without CRC support\n")); usage(); } cli->sb_feat.exchrange = false; + + if (cli->sb_feat.parent_pointers && + cli_opt_set(&nopts, N_PARENT)) { + fprintf(stderr, +_("parent pointers not supported without CRC support\n")); + usage(); + } + cli->sb_feat.parent_pointers = false; } if (!cli->sb_feat.finobt) { @@ -3458,8 +3479,6 @@ sb_set_features( sbp->sb_features2 |= XFS_SB_VERSION2_LAZYSBCOUNTBIT; if (fp->projid32bit) sbp->sb_features2 |= XFS_SB_VERSION2_PROJID32BIT; - if (fp->parent_pointers) - sbp->sb_features2 |= XFS_SB_VERSION2_PARENTBIT; if (fp->crcs_enabled) sbp->sb_features2 |= XFS_SB_VERSION2_CRCBIT; if (fp->attr_version == 2) @@ -3500,6 +3519,10 @@ sb_set_features( sbp->sb_features_ro_compat |= XFS_SB_FEAT_RO_COMPAT_INOBTCNT; if (fp->bigtime) sbp->sb_features_incompat |= XFS_SB_FEAT_INCOMPAT_BIGTIME; + if (fp->parent_pointers) { + sbp->sb_features_incompat |= XFS_SB_FEAT_INCOMPAT_PARENT; + sbp->sb_versionnum |= XFS_SB_VERSION_ATTRBIT; + } /* * Sparse inode chunk support has two main inode alignment requirements.