nfsd: Checking for acl support does not require fetching any acls
Whether or not a file system supports acls can be determined with IS_POSIXACL(inode) and does not require trying to fetch any acls; the code for computing the supported_attrs and aclsupport attributes can be simplified. Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
cc265089ce
commit
0c9d65e76a
1 changed files with 10 additions and 15 deletions
|
@ -2227,7 +2227,6 @@ nfsd4_encode_fattr(struct xdr_stream *xdr, struct svc_fh *fhp,
|
||||||
u32 rdattr_err = 0;
|
u32 rdattr_err = 0;
|
||||||
__be32 status;
|
__be32 status;
|
||||||
int err;
|
int err;
|
||||||
int aclsupport = 0;
|
|
||||||
struct nfs4_acl *acl = NULL;
|
struct nfs4_acl *acl = NULL;
|
||||||
void *context = NULL;
|
void *context = NULL;
|
||||||
int contextlen;
|
int contextlen;
|
||||||
|
@ -2274,19 +2273,15 @@ nfsd4_encode_fattr(struct xdr_stream *xdr, struct svc_fh *fhp,
|
||||||
goto out;
|
goto out;
|
||||||
fhp = tempfh;
|
fhp = tempfh;
|
||||||
}
|
}
|
||||||
if (bmval0 & (FATTR4_WORD0_ACL | FATTR4_WORD0_ACLSUPPORT
|
if (bmval0 & FATTR4_WORD0_ACL) {
|
||||||
| FATTR4_WORD0_SUPPORTED_ATTRS)) {
|
|
||||||
err = nfsd4_get_nfs4_acl(rqstp, dentry, &acl);
|
err = nfsd4_get_nfs4_acl(rqstp, dentry, &acl);
|
||||||
aclsupport = (err == 0);
|
if (err == -EOPNOTSUPP)
|
||||||
if (bmval0 & FATTR4_WORD0_ACL) {
|
bmval0 &= ~FATTR4_WORD0_ACL;
|
||||||
if (err == -EOPNOTSUPP)
|
else if (err == -EINVAL) {
|
||||||
bmval0 &= ~FATTR4_WORD0_ACL;
|
status = nfserr_attrnotsupp;
|
||||||
else if (err == -EINVAL) {
|
goto out;
|
||||||
status = nfserr_attrnotsupp;
|
} else if (err != 0)
|
||||||
goto out;
|
goto out_nfserr;
|
||||||
} else if (err != 0)
|
|
||||||
goto out_nfserr;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_NFSD_V4_SECURITY_LABEL
|
#ifdef CONFIG_NFSD_V4_SECURITY_LABEL
|
||||||
|
@ -2338,7 +2333,7 @@ nfsd4_encode_fattr(struct xdr_stream *xdr, struct svc_fh *fhp,
|
||||||
u32 word1 = nfsd_suppattrs1(minorversion);
|
u32 word1 = nfsd_suppattrs1(minorversion);
|
||||||
u32 word2 = nfsd_suppattrs2(minorversion);
|
u32 word2 = nfsd_suppattrs2(minorversion);
|
||||||
|
|
||||||
if (!aclsupport)
|
if (!IS_POSIXACL(dentry->d_inode))
|
||||||
word0 &= ~FATTR4_WORD0_ACL;
|
word0 &= ~FATTR4_WORD0_ACL;
|
||||||
if (!contextsupport)
|
if (!contextsupport)
|
||||||
word2 &= ~FATTR4_WORD2_SECURITY_LABEL;
|
word2 &= ~FATTR4_WORD2_SECURITY_LABEL;
|
||||||
|
@ -2486,7 +2481,7 @@ out_acl:
|
||||||
p = xdr_reserve_space(xdr, 4);
|
p = xdr_reserve_space(xdr, 4);
|
||||||
if (!p)
|
if (!p)
|
||||||
goto out_resource;
|
goto out_resource;
|
||||||
*p++ = cpu_to_be32(aclsupport ?
|
*p++ = cpu_to_be32(IS_POSIXACL(dentry->d_inode) ?
|
||||||
ACL4_SUPPORT_ALLOW_ACL|ACL4_SUPPORT_DENY_ACL : 0);
|
ACL4_SUPPORT_ALLOW_ACL|ACL4_SUPPORT_DENY_ACL : 0);
|
||||||
}
|
}
|
||||||
if (bmval0 & FATTR4_WORD0_CANSETTIME) {
|
if (bmval0 & FATTR4_WORD0_CANSETTIME) {
|
||||||
|
|
Loading…
Reference in a new issue