Merge tag 'idmapped-mounts-v5.12' of git://git.kernel.org/pub/scm/linux/kernel/git...
[platform/kernel/linux-rpi.git] / fs / nfsd / nfs3acl.c
index f18ec7e..9a6f18d 100644 (file)
@@ -126,43 +126,39 @@ out:
 /*
  * XDR decode functions
  */
+
 static int nfs3svc_decode_getaclargs(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd3_getaclargs *args = rqstp->rq_argp;
 
-       p = nfs3svc_decode_fh(p, &args->fh);
-       if (!p)
+       if (!svcxdr_decode_nfs_fh3(xdr, &args->fh))
+               return 0;
+       if (xdr_stream_decode_u32(xdr, &args->mask) < 0)
                return 0;
-       args->mask = ntohl(*p); p++;
 
-       return xdr_argsize_check(rqstp, p);
+       return 1;
 }
 
-
 static int nfs3svc_decode_setaclargs(struct svc_rqst *rqstp, __be32 *p)
 {
-       struct nfsd3_setaclargs *args = rqstp->rq_argp;
-       struct kvec *head = rqstp->rq_arg.head;
-       unsigned int base;
-       int n;
+       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
+       struct nfsd3_setaclargs *argp = rqstp->rq_argp;
 
-       p = nfs3svc_decode_fh(p, &args->fh);
-       if (!p)
+       if (!svcxdr_decode_nfs_fh3(xdr, &argp->fh))
                return 0;
-       args->mask = ntohl(*p++);
-       if (args->mask & ~NFS_ACL_MASK ||
-           !xdr_argsize_check(rqstp, p))
+       if (xdr_stream_decode_u32(xdr, &argp->mask) < 0)
+               return 0;
+       if (argp->mask & ~NFS_ACL_MASK)
+               return 0;
+       if (!nfs_stream_decode_acl(xdr, NULL, (argp->mask & NFS_ACL) ?
+                                  &argp->acl_access : NULL))
+               return 0;
+       if (!nfs_stream_decode_acl(xdr, NULL, (argp->mask & NFS_DFACL) ?
+                                  &argp->acl_default : NULL))
                return 0;
 
-       base = (char *)p - (char *)head->iov_base;
-       n = nfsacl_decode(&rqstp->rq_arg, base, NULL,
-                         (args->mask & NFS_ACL) ?
-                         &args->acl_access : NULL);
-       if (n > 0)
-               n = nfsacl_decode(&rqstp->rq_arg, base + n, NULL,
-                                 (args->mask & NFS_DFACL) ?
-                                 &args->acl_default : NULL);
-       return (n > 0);
+       return 1;
 }
 
 /*
@@ -253,6 +249,7 @@ static const struct svc_procedure nfsd_acl_procedures3[3] = {
                .pc_ressize = sizeof(struct nfsd_voidres),
                .pc_cachetype = RC_NOCACHE,
                .pc_xdrressize = ST,
+               .pc_name = "NULL",
        },
        [ACLPROC3_GETACL] = {
                .pc_func = nfsd3_proc_getacl,
@@ -263,6 +260,7 @@ static const struct svc_procedure nfsd_acl_procedures3[3] = {
                .pc_ressize = sizeof(struct nfsd3_getaclres),
                .pc_cachetype = RC_NOCACHE,
                .pc_xdrressize = ST+1+2*(1+ACL),
+               .pc_name = "GETACL",
        },
        [ACLPROC3_SETACL] = {
                .pc_func = nfsd3_proc_setacl,
@@ -273,6 +271,7 @@ static const struct svc_procedure nfsd_acl_procedures3[3] = {
                .pc_ressize = sizeof(struct nfsd3_attrstat),
                .pc_cachetype = RC_NOCACHE,
                .pc_xdrressize = ST+pAT,
+               .pc_name = "SETACL",
        },
 };