nfsd: Checking for acl support does not require fetching any acls
authorAndreas Gruenbacher <andreas.gruenbacher@gmail.com>
Fri, 24 Apr 2015 11:04:00 +0000 (13:04 +0200)
committerJ. Bruce Fields <bfields@redhat.com>
Fri, 29 May 2015 15:04:02 +0000 (11:04 -0400)
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>
fs/nfsd/nfs4xdr.c

index 158badf945df1da9b5f146933b525538cbf1211f..5c7eab9c12ba272a99af4c7ccf6f1e9a8753dfde 100644 (file)
@@ -2227,7 +2227,6 @@ nfsd4_encode_fattr(struct xdr_stream *xdr, struct svc_fh *fhp,
        u32 rdattr_err = 0;
        __be32 status;
        int err;
-       int aclsupport = 0;
        struct nfs4_acl *acl = NULL;
        void *context = NULL;
        int contextlen;
@@ -2274,19 +2273,15 @@ nfsd4_encode_fattr(struct xdr_stream *xdr, struct svc_fh *fhp,
                        goto out;
                fhp = tempfh;
        }
-       if (bmval0 & (FATTR4_WORD0_ACL | FATTR4_WORD0_ACLSUPPORT
-                       | FATTR4_WORD0_SUPPORTED_ATTRS)) {
+       if (bmval0 & FATTR4_WORD0_ACL) {
                err = nfsd4_get_nfs4_acl(rqstp, dentry, &acl);
-               aclsupport = (err == 0);
-               if (bmval0 & FATTR4_WORD0_ACL) {
-                       if (err == -EOPNOTSUPP)
-                               bmval0 &= ~FATTR4_WORD0_ACL;
-                       else if (err == -EINVAL) {
-                               status = nfserr_attrnotsupp;
-                               goto out;
-                       } else if (err != 0)
-                               goto out_nfserr;
-               }
+               if (err == -EOPNOTSUPP)
+                       bmval0 &= ~FATTR4_WORD0_ACL;
+               else if (err == -EINVAL) {
+                       status = nfserr_attrnotsupp;
+                       goto out;
+               } else if (err != 0)
+                       goto out_nfserr;
        }
 
 #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 word2 = nfsd_suppattrs2(minorversion);
 
-               if (!aclsupport)
+               if (!IS_POSIXACL(dentry->d_inode))
                        word0 &= ~FATTR4_WORD0_ACL;
                if (!contextsupport)
                        word2 &= ~FATTR4_WORD2_SECURITY_LABEL;
@@ -2486,7 +2481,7 @@ out_acl:
                p = xdr_reserve_space(xdr, 4);
                if (!p)
                        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);
        }
        if (bmval0 & FATTR4_WORD0_CANSETTIME) {