From: Darrick J. Wong <darrick.wong@xxxxxxxxxx> Teach mkfs to set the DAX flag on the root directory so that all new files can be created in dax mode. This is a complement to removing the mount option. Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> Reviewed-by: Christoph Hellwig <hch@xxxxxx> Reviewed-by: Carlos Maiolino <cmaiolino@xxxxxxxxxx> --- v2: minor tweak to manpage text --- man/man8/mkfs.xfs.8 | 10 ++++++++++ mkfs/xfs_mkfs.c | 14 ++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/man/man8/mkfs.xfs.8 b/man/man8/mkfs.xfs.8 index 7d3f3552ff12..0a7858748457 100644 --- a/man/man8/mkfs.xfs.8 +++ b/man/man8/mkfs.xfs.8 @@ -398,6 +398,16 @@ will have this extent size hint applied. The value must be provided in units of filesystem blocks. Directories will pass on this hint to newly created regular files and directories. +.TP +.BI daxinherit= value +If set, all inodes created by +.B mkfs.xfs +will be created with the DAX flag set. +Directories will pass on this flag to newly created regular files and +directories. +By default, +.B mkfs.xfs +will not enable DAX mode. .RE .TP .B \-f diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 2e6cd280e388..a687f385a9c1 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -60,6 +60,7 @@ enum { D_PROJINHERIT, D_EXTSZINHERIT, D_COWEXTSIZE, + D_DAXINHERIT, D_MAX_OPTS, }; @@ -254,6 +255,7 @@ static struct opt_params dopts = { [D_PROJINHERIT] = "projinherit", [D_EXTSZINHERIT] = "extszinherit", [D_COWEXTSIZE] = "cowextsize", + [D_DAXINHERIT] = "daxinherit", }, .subopt_params = { { .index = D_AGCOUNT, @@ -369,6 +371,12 @@ static struct opt_params dopts = { .maxval = UINT_MAX, .defaultval = SUBOPT_NEEDS_VAL, }, + { .index = D_DAXINHERIT, + .conflicts = { { NULL, LAST_CONFLICT } }, + .minval = 0, + .maxval = 1, + .defaultval = 1, + }, }, }; @@ -1434,6 +1442,12 @@ data_opts_parser( cli->fsx.fsx_cowextsize = getnum(value, opts, subopt); cli->fsx.fsx_xflags |= FS_XFLAG_COWEXTSIZE; break; + case D_DAXINHERIT: + if (getnum(value, opts, subopt)) + cli->fsx.fsx_xflags |= FS_XFLAG_DAX; + else + cli->fsx.fsx_xflags &= ~FS_XFLAG_DAX; + break; default: return -EINVAL; }