mkfs: enable feature bit in mkfs via the '-n delattr' parameter. Signed-off-by: Allison Collins <allison.henderson@xxxxxxxxxx> --- mkfs/xfs_mkfs.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index a687f38..b7ce5fe2 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -94,6 +94,7 @@ enum { N_SIZE = 0, N_VERSION, N_FTYPE, + N_DELATTR, N_MAX_OPTS, }; @@ -547,6 +548,7 @@ static struct opt_params nopts = { [N_SIZE] = "size", [N_VERSION] = "version", [N_FTYPE] = "ftype", + [N_DELATTR] = "delattr", }, .subopt_params = { { .index = N_SIZE, @@ -569,6 +571,12 @@ static struct opt_params nopts = { .maxval = 1, .defaultval = 1, }, + { .index = N_DELATTR, + .conflicts = { { NULL, LAST_CONFLICT } }, + .minval = 0, + .maxval = 1, + .defaultval = 1, + }, }, }; @@ -742,6 +750,7 @@ struct sb_feat_args { bool reflink; /* XFS_SB_FEAT_RO_COMPAT_REFLINK */ bool nodalign; bool nortalign; + bool delattr; /* XFS_SB_FEAT_INCOMPAT_LOG_DELATTR */ }; struct cli_params { @@ -873,7 +882,7 @@ usage( void ) /* log subvol */ [-l agnum=n,internal,size=num,logdev=xxx,version=n\n\ sunit=value|su=num,sectsize=num,lazy-count=0|1]\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,delattr=0|1]\n\ /* no-op info only */ [-N]\n\ /* prototype file */ [-p fname]\n\ /* quiet */ [-q]\n\ @@ -1592,6 +1601,9 @@ naming_opts_parser( case N_FTYPE: cli->sb_feat.dirftype = getnum(value, opts, subopt); break; + case N_DELATTR: + cli->sb_feat.delattr = getnum(value, &nopts, N_DELATTR); + break; default: return -EINVAL; } @@ -1988,6 +2000,14 @@ _("reflink not supported without CRC support\n")); cli->sb_feat.reflink = false; } + if ((cli->sb_feat.delattr) && + cli->sb_feat.dir_version == 4) { + fprintf(stderr, +_("delayed attributes not supported on v4 filesystems\n")); + usage(); + cli->sb_feat.delattr = false; + } + if ((cli->fsx.fsx_xflags & FS_XFLAG_COWEXTSIZE) && !cli->sb_feat.reflink) { fprintf(stderr, @@ -2951,6 +2971,8 @@ sb_set_features( sbp->sb_features_ro_compat |= XFS_SB_FEAT_RO_COMPAT_RMAPBT; if (fp->reflink) sbp->sb_features_ro_compat |= XFS_SB_FEAT_RO_COMPAT_REFLINK; + if (fp->delattr) + sbp->sb_features_log_incompat |= XFS_SB_FEAT_INCOMPAT_LOG_DELATTR; /* * Sparse inode chunk support has two main inode alignment requirements. -- 2.7.4