Filesystems with the richacl feature are not supposed to contain POSIX ACLs, and filesystems without the richacl feature are not supposed to contain richacls. Fix by removing unexpected attributes. Signed-off-by: Andreas Gruenbacher <agruenba@xxxxxxxxxx> --- repair/attr_repair.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/repair/attr_repair.c b/repair/attr_repair.c index e7f03a8..8ded369 100644 --- a/repair/attr_repair.c +++ b/repair/attr_repair.c @@ -160,6 +160,8 @@ valuecheck( int namelen, int valuelen) { + const bool feature_richacl = xfs_sb_has_incompat_feature(&mp->m_sb, + XFS_SB_FEAT_INCOMPAT_RICHACL); /* for proper alignment issues, get the structs and memmove the values */ xfs_mac_label_t macl; void *valuep; @@ -169,6 +171,13 @@ valuecheck( strncmp(namevalue, SGI_ACL_FILE, SGI_ACL_FILE_SIZE) == 0) || (namelen == SGI_ACL_DEFAULT_SIZE && strncmp(namevalue, SGI_ACL_DEFAULT, SGI_ACL_DEFAULT_SIZE) == 0)) { + if (feature_richacl) { + do_warn(_("filesystem feature %s set " + "but attribute %.*s exists\n"), + "richacl", namelen, namevalue); + return 1; + } + if (value == NULL) { valuep = malloc(valuelen); if (!valuep) @@ -211,6 +220,13 @@ valuecheck( strncmp(namevalue, XATTR_RICHACL, strlen(XATTR_RICHACL)) == 0) { struct richacl *acl; + if (!feature_richacl) { + do_warn(_("filesystem feature %s not set " + "but attribute %.*s exists\n"), + "richacl", namelen, namevalue); + return 1; + } + if (value == NULL) { valuep = malloc(valuelen); if (!valuep) -- 2.5.0 _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs