From: Andreas Gruenbacher <andreas.gruenbacher@xxxxxxxxx>
Add option "mkfs.xfs -m richacl={0|1}" for explicitly enabling or disabling
richacl support. The feature flag is disabled by default.
Signed-off-by: Andreas Gruenbacher <andreas.gruenbacher@xxxxxxxxx>
---
man/man8/mkfs.xfs.8 | 9 +++++++++
mkfs/xfs_mkfs.c | 20 ++++++++++++++++++--
2 files changed, 27 insertions(+), 2 deletions(-)
diff --git a/man/man8/mkfs.xfs.8 b/man/man8/mkfs.xfs.8
index e98b94d..99ef6a6 100644
--- a/man/man8/mkfs.xfs.8
+++ b/man/man8/mkfs.xfs.8
@@ -173,6 +173,15 @@ is used, the free inode btree feature is not supported and
is disabled.
.BI uuid= value
Use the given value as the filesystem UUID for the newly created filesystem.
The default is to generate a random UUID.
+.BI richacl= value
+This option is used to create a filesystem with support for Rich Access Control
+Lists (richacls). The value is either 0 to disable the feature, or 1 to enable
+richacls. Filesystems with richacl support require richacl support in the
+kernel to be mounted.
+.IP
+By default,
+.B mkfs.xfs
+will disable richacls.
.RE
.TP
.BI \-d " data_section_options"
diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c
index 7cba41a..300333f 100644
--- a/mkfs/xfs_mkfs.c
+++ b/mkfs/xfs_mkfs.c
@@ -185,6 +185,8 @@ char *mopts[] = {
"finobt",
#define M_UUID 2
"uuid",
+#define M_RICHACL 3
+ "richacl",
NULL
};
@@ -983,6 +985,7 @@ main(
int crcs_enabled;
int finobt;
bool finobtflag;
+ int richacls_enabled;
int spinodes;
platform_uuid_generate(&uuid);
@@ -1021,6 +1024,7 @@ main(
crcs_enabled = 1;
finobt = 1;
finobtflag = false;
+ richacls_enabled = 0;
spinodes = 0;
memset(&fsx, 0, sizeof(fsx));
@@ -1532,6 +1536,14 @@ main(
if (platform_uuid_parse(value, &uuid))
illegal(optarg, "m uuid");
break;
+ case M_RICHACL:
+ if (!value || *value == '\0')
+ reqval('m', mopts, M_RICHACL);
+ c = atoi(value);
+ if (c < 0 || c > 1)
+ illegal(value, "m richacl");
+ richacls_enabled = c;
+ break;
default:
unknown('m', value);
}
@@ -2562,11 +2574,15 @@ _("size %s specified for log subvolume is too large,
maximum is %lld blocks\n"),
dirftype = 1;
}
+ if (richacls_enabled) {
+ sbp->sb_features_incompat |= XFS_SB_FEAT_INCOMPAT_RICHACL;
+ }
+
if (!qflag || Nflag) {
printf(_(
"meta-data=%-22s isize=%-6d agcount=%lld, agsize=%lld blks\n"
" =%-22s sectsz=%-5u attr=%u, projid32bit=%u\n"
- " =%-22s crc=%-8u finobt=%u, sparse=%u\n"
+ " =%-22s crc=%-8u finobt=%u, richacl=%d, sparse=%u\n"
"data =%-22s bsize=%-6u blocks=%llu, imaxpct=%u\n"
" =%-22s sunit=%-6u swidth=%u blks\n"
"naming =version %-14u bsize=%-6u ascii-ci=%d ftype=%d\n"
@@ -2575,7 +2591,7 @@ _("size %s specified for log subvolume is too large,
maximum is %lld blocks\n"),
"realtime =%-22s extsz=%-6d blocks=%lld, rtextents=%lld\n"),
dfile, isize, (long long)agcount, (long long)agsize,
"", sectorsize, attrversion, !projid16bit,
- "", crcs_enabled, finobt, spinodes,
+ "", crcs_enabled, finobt, richacls_enabled, spinodes,
"", blocksize, (long long)dblocks, imaxpct,
"", dsunit, dswidth,
dirversion, dirblocksize, nci, dirftype,
--
2.5.0
|