SUNRPC: Replace the "__be32 *p" parameter to .pc_decode
authorChuck Lever <chuck.lever@oracle.com>
Tue, 12 Oct 2021 15:57:22 +0000 (11:57 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Wed, 13 Oct 2021 14:29:41 +0000 (10:29 -0400)
The passed-in value of the "__be32 *p" parameter is now unused in
every server-side XDR decoder, and can be removed.

Note also that there is a line in each decoder that sets up a local
pointer to a struct xdr_stream. Passing that pointer from the
dispatcher instead saves one line per decoder function.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
16 files changed:
fs/lockd/svc.c
fs/lockd/xdr.c
fs/lockd/xdr4.c
fs/nfsd/nfs2acl.c
fs/nfsd/nfs3acl.c
fs/nfsd/nfs3xdr.c
fs/nfsd/nfs4xdr.c
fs/nfsd/nfsd.h
fs/nfsd/nfssvc.c
fs/nfsd/nfsxdr.c
fs/nfsd/xdr.h
fs/nfsd/xdr3.h
fs/nfsd/xdr4.h
include/linux/lockd/xdr.h
include/linux/lockd/xdr4.h
include/linux/sunrpc/svc.h

index b632be3ad57b2840b528de2de4811d19e54d76ef..9a82471bda0714f90567054e6934cdc0414e290c 100644 (file)
@@ -780,11 +780,10 @@ module_exit(exit_nlm);
 static int nlmsvc_dispatch(struct svc_rqst *rqstp, __be32 *statp)
 {
        const struct svc_procedure *procp = rqstp->rq_procinfo;
-       struct kvec *argv = rqstp->rq_arg.head;
        struct kvec *resv = rqstp->rq_res.head;
 
        svcxdr_init_decode(rqstp);
-       if (!procp->pc_decode(rqstp, argv->iov_base))
+       if (!procp->pc_decode(rqstp, &rqstp->rq_arg_stream))
                goto out_decode_err;
 
        *statp = procp->pc_func(rqstp);
index 9235e60b17694bf031dbdfaf1d15cd54a1bc5ab4..895f15222104860905bfc5e9e073d4b3a322f7f3 100644 (file)
@@ -146,15 +146,14 @@ svcxdr_encode_testrply(struct xdr_stream *xdr, const struct nlm_res *resp)
  */
 
 int
-nlmsvc_decode_void(struct svc_rqst *rqstp, __be32 *p)
+nlmsvc_decode_void(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
        return 1;
 }
 
 int
-nlmsvc_decode_testargs(struct svc_rqst *rqstp, __be32 *p)
+nlmsvc_decode_testargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nlm_args *argp = rqstp->rq_argp;
        u32 exclusive;
 
@@ -171,9 +170,8 @@ nlmsvc_decode_testargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nlmsvc_decode_lockargs(struct svc_rqst *rqstp, __be32 *p)
+nlmsvc_decode_lockargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nlm_args *argp = rqstp->rq_argp;
        u32 exclusive;
 
@@ -197,9 +195,8 @@ nlmsvc_decode_lockargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nlmsvc_decode_cancargs(struct svc_rqst *rqstp, __be32 *p)
+nlmsvc_decode_cancargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nlm_args *argp = rqstp->rq_argp;
        u32 exclusive;
 
@@ -218,9 +215,8 @@ nlmsvc_decode_cancargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nlmsvc_decode_unlockargs(struct svc_rqst *rqstp, __be32 *p)
+nlmsvc_decode_unlockargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nlm_args *argp = rqstp->rq_argp;
 
        if (!svcxdr_decode_cookie(xdr, &argp->cookie))
@@ -233,9 +229,8 @@ nlmsvc_decode_unlockargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nlmsvc_decode_res(struct svc_rqst *rqstp, __be32 *p)
+nlmsvc_decode_res(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nlm_res *resp = rqstp->rq_argp;
 
        if (!svcxdr_decode_cookie(xdr, &resp->cookie))
@@ -247,10 +242,10 @@ nlmsvc_decode_res(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nlmsvc_decode_reboot(struct svc_rqst *rqstp, __be32 *p)
+nlmsvc_decode_reboot(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nlm_reboot *argp = rqstp->rq_argp;
+       __be32 *p;
        u32 len;
 
        if (xdr_stream_decode_u32(xdr, &len) < 0)
@@ -273,9 +268,8 @@ nlmsvc_decode_reboot(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nlmsvc_decode_shareargs(struct svc_rqst *rqstp, __be32 *p)
+nlmsvc_decode_shareargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nlm_args *argp = rqstp->rq_argp;
        struct nlm_lock *lock = &argp->lock;
 
@@ -301,9 +295,8 @@ nlmsvc_decode_shareargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nlmsvc_decode_notify(struct svc_rqst *rqstp, __be32 *p)
+nlmsvc_decode_notify(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nlm_args *argp = rqstp->rq_argp;
        struct nlm_lock *lock = &argp->lock;
 
index 98e957e4566c27f8a6e91d0ae73711c461572d57..573c7d580a5e646afe92917cbd89f6b904818072 100644 (file)
@@ -145,15 +145,14 @@ svcxdr_encode_testrply(struct xdr_stream *xdr, const struct nlm_res *resp)
  */
 
 int
-nlm4svc_decode_void(struct svc_rqst *rqstp, __be32 *p)
+nlm4svc_decode_void(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
        return 1;
 }
 
 int
-nlm4svc_decode_testargs(struct svc_rqst *rqstp, __be32 *p)
+nlm4svc_decode_testargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nlm_args *argp = rqstp->rq_argp;
        u32 exclusive;
 
@@ -170,9 +169,8 @@ nlm4svc_decode_testargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nlm4svc_decode_lockargs(struct svc_rqst *rqstp, __be32 *p)
+nlm4svc_decode_lockargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nlm_args *argp = rqstp->rq_argp;
        u32 exclusive;
 
@@ -196,9 +194,8 @@ nlm4svc_decode_lockargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nlm4svc_decode_cancargs(struct svc_rqst *rqstp, __be32 *p)
+nlm4svc_decode_cancargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nlm_args *argp = rqstp->rq_argp;
        u32 exclusive;
 
@@ -216,9 +213,8 @@ nlm4svc_decode_cancargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nlm4svc_decode_unlockargs(struct svc_rqst *rqstp, __be32 *p)
+nlm4svc_decode_unlockargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nlm_args *argp = rqstp->rq_argp;
 
        if (!svcxdr_decode_cookie(xdr, &argp->cookie))
@@ -231,9 +227,8 @@ nlm4svc_decode_unlockargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nlm4svc_decode_res(struct svc_rqst *rqstp, __be32 *p)
+nlm4svc_decode_res(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nlm_res *resp = rqstp->rq_argp;
 
        if (!svcxdr_decode_cookie(xdr, &resp->cookie))
@@ -245,10 +240,10 @@ nlm4svc_decode_res(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nlm4svc_decode_reboot(struct svc_rqst *rqstp, __be32 *p)
+nlm4svc_decode_reboot(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nlm_reboot *argp = rqstp->rq_argp;
+       __be32 *p;
        u32 len;
 
        if (xdr_stream_decode_u32(xdr, &len) < 0)
@@ -271,9 +266,8 @@ nlm4svc_decode_reboot(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nlm4svc_decode_shareargs(struct svc_rqst *rqstp, __be32 *p)
+nlm4svc_decode_shareargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nlm_args *argp = rqstp->rq_argp;
        struct nlm_lock *lock = &argp->lock;
 
@@ -299,9 +293,8 @@ nlm4svc_decode_shareargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nlm4svc_decode_notify(struct svc_rqst *rqstp, __be32 *p)
+nlm4svc_decode_notify(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nlm_args *argp = rqstp->rq_argp;
        struct nlm_lock *lock = &argp->lock;
 
index 4b43929c1f25530fdd2e89945f536b1a4a6708a9..0069c0fdb94f9deff420aa147548344a6af4c1da 100644 (file)
@@ -188,9 +188,9 @@ out:
  * XDR decode functions
  */
 
-static int nfsaclsvc_decode_getaclargs(struct svc_rqst *rqstp, __be32 *p)
+static int
+nfsaclsvc_decode_getaclargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd3_getaclargs *argp = rqstp->rq_argp;
 
        if (!svcxdr_decode_fhandle(xdr, &argp->fh))
@@ -201,9 +201,9 @@ static int nfsaclsvc_decode_getaclargs(struct svc_rqst *rqstp, __be32 *p)
        return 1;
 }
 
-static int nfsaclsvc_decode_setaclargs(struct svc_rqst *rqstp, __be32 *p)
+static int
+nfsaclsvc_decode_setaclargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd3_setaclargs *argp = rqstp->rq_argp;
 
        if (!svcxdr_decode_fhandle(xdr, &argp->fh))
@@ -222,9 +222,9 @@ static int nfsaclsvc_decode_setaclargs(struct svc_rqst *rqstp, __be32 *p)
        return 1;
 }
 
-static int nfsaclsvc_decode_accessargs(struct svc_rqst *rqstp, __be32 *p)
+static int
+nfsaclsvc_decode_accessargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd3_accessargs *args = rqstp->rq_argp;
 
        if (!svcxdr_decode_fhandle(xdr, &args->fh))
index 5dfe7644a51722bd6fe6fd89679e3530af9a9b5e..b1e352ed2436ed883b90612ce2ea17f3d7b8e753 100644 (file)
@@ -127,9 +127,9 @@ out:
  * XDR decode functions
  */
 
-static int nfs3svc_decode_getaclargs(struct svc_rqst *rqstp, __be32 *p)
+static int
+nfs3svc_decode_getaclargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd3_getaclargs *args = rqstp->rq_argp;
 
        if (!svcxdr_decode_nfs_fh3(xdr, &args->fh))
@@ -140,9 +140,9 @@ static int nfs3svc_decode_getaclargs(struct svc_rqst *rqstp, __be32 *p)
        return 1;
 }
 
-static int nfs3svc_decode_setaclargs(struct svc_rqst *rqstp, __be32 *p)
+static int
+nfs3svc_decode_setaclargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd3_setaclargs *argp = rqstp->rq_argp;
 
        if (!svcxdr_decode_nfs_fh3(xdr, &argp->fh))
index 267e56f218af7d9484685353ea5fd1ec7eab0009..5f744f03cda7cf5abef10e3be5e0b784ae5a224f 100644 (file)
@@ -557,18 +557,16 @@ void fill_post_wcc(struct svc_fh *fhp)
  */
 
 int
-nfs3svc_decode_fhandleargs(struct svc_rqst *rqstp, __be32 *p)
+nfs3svc_decode_fhandleargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd_fhandle *args = rqstp->rq_argp;
 
        return svcxdr_decode_nfs_fh3(xdr, &args->fh);
 }
 
 int
-nfs3svc_decode_sattrargs(struct svc_rqst *rqstp, __be32 *p)
+nfs3svc_decode_sattrargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd3_sattrargs *args = rqstp->rq_argp;
 
        return svcxdr_decode_nfs_fh3(xdr, &args->fh) &&
@@ -577,18 +575,16 @@ nfs3svc_decode_sattrargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nfs3svc_decode_diropargs(struct svc_rqst *rqstp, __be32 *p)
+nfs3svc_decode_diropargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd3_diropargs *args = rqstp->rq_argp;
 
        return svcxdr_decode_diropargs3(xdr, &args->fh, &args->name, &args->len);
 }
 
 int
-nfs3svc_decode_accessargs(struct svc_rqst *rqstp, __be32 *p)
+nfs3svc_decode_accessargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd3_accessargs *args = rqstp->rq_argp;
 
        if (!svcxdr_decode_nfs_fh3(xdr, &args->fh))
@@ -600,9 +596,8 @@ nfs3svc_decode_accessargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nfs3svc_decode_readargs(struct svc_rqst *rqstp, __be32 *p)
+nfs3svc_decode_readargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd3_readargs *args = rqstp->rq_argp;
 
        if (!svcxdr_decode_nfs_fh3(xdr, &args->fh))
@@ -616,9 +611,8 @@ nfs3svc_decode_readargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nfs3svc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p)
+nfs3svc_decode_writeargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd3_writeargs *args = rqstp->rq_argp;
        u32 max_blocksize = svc_max_payload(rqstp);
 
@@ -649,9 +643,8 @@ nfs3svc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nfs3svc_decode_createargs(struct svc_rqst *rqstp, __be32 *p)
+nfs3svc_decode_createargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd3_createargs *args = rqstp->rq_argp;
 
        if (!svcxdr_decode_diropargs3(xdr, &args->fh, &args->name, &args->len))
@@ -674,9 +667,8 @@ nfs3svc_decode_createargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nfs3svc_decode_mkdirargs(struct svc_rqst *rqstp, __be32 *p)
+nfs3svc_decode_mkdirargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd3_createargs *args = rqstp->rq_argp;
 
        return svcxdr_decode_diropargs3(xdr, &args->fh,
@@ -685,9 +677,8 @@ nfs3svc_decode_mkdirargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nfs3svc_decode_symlinkargs(struct svc_rqst *rqstp, __be32 *p)
+nfs3svc_decode_symlinkargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd3_symlinkargs *args = rqstp->rq_argp;
        struct kvec *head = rqstp->rq_arg.head;
        struct kvec *tail = rqstp->rq_arg.tail;
@@ -713,9 +704,8 @@ nfs3svc_decode_symlinkargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nfs3svc_decode_mknodargs(struct svc_rqst *rqstp, __be32 *p)
+nfs3svc_decode_mknodargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd3_mknodargs *args = rqstp->rq_argp;
 
        if (!svcxdr_decode_diropargs3(xdr, &args->fh, &args->name, &args->len))
@@ -742,9 +732,8 @@ nfs3svc_decode_mknodargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nfs3svc_decode_renameargs(struct svc_rqst *rqstp, __be32 *p)
+nfs3svc_decode_renameargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd3_renameargs *args = rqstp->rq_argp;
 
        return svcxdr_decode_diropargs3(xdr, &args->ffh,
@@ -754,9 +743,8 @@ nfs3svc_decode_renameargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nfs3svc_decode_linkargs(struct svc_rqst *rqstp, __be32 *p)
+nfs3svc_decode_linkargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd3_linkargs *args = rqstp->rq_argp;
 
        return svcxdr_decode_nfs_fh3(xdr, &args->ffh) &&
@@ -765,9 +753,8 @@ nfs3svc_decode_linkargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nfs3svc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p)
+nfs3svc_decode_readdirargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd3_readdirargs *args = rqstp->rq_argp;
 
        if (!svcxdr_decode_nfs_fh3(xdr, &args->fh))
@@ -784,9 +771,8 @@ nfs3svc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, __be32 *p)
+nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd3_readdirargs *args = rqstp->rq_argp;
        u32 dircount;
 
@@ -807,9 +793,8 @@ nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nfs3svc_decode_commitargs(struct svc_rqst *rqstp, __be32 *p)
+nfs3svc_decode_commitargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd3_commitargs *args = rqstp->rq_argp;
 
        if (!svcxdr_decode_nfs_fh3(xdr, &args->fh))
index a54b2845473b39fab930cecbb04b2557b56aeb49..fc0f154f117284fa6a4d0fb9546d7ae5a7a5a290 100644 (file)
@@ -5412,14 +5412,14 @@ void nfsd4_release_compoundargs(struct svc_rqst *rqstp)
 }
 
 int
-nfs4svc_decode_compoundargs(struct svc_rqst *rqstp, __be32 *p)
+nfs4svc_decode_compoundargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
        struct nfsd4_compoundargs *args = rqstp->rq_argp;
 
        /* svcxdr_tmp_alloc */
        args->to_free = NULL;
 
-       args->xdr = &rqstp->rq_arg_stream;
+       args->xdr = xdr;
        args->ops = args->iops;
        args->rqstp = rqstp;
 
index 9664303afdaf3e554b3c24d8266337a145228561..6e8ad5f9757c8863df260c2405d9b17f3fe29481 100644 (file)
@@ -78,7 +78,8 @@ extern const struct seq_operations nfs_exports_op;
  */
 struct nfsd_voidargs { };
 struct nfsd_voidres { };
-int            nfssvc_decode_voidarg(struct svc_rqst *rqstp, __be32 *p);
+int            nfssvc_decode_voidarg(struct svc_rqst *rqstp,
+                                     struct xdr_stream *xdr);
 int            nfssvc_encode_voidres(struct svc_rqst *rqstp, __be32 *p);
 
 /*
index ccb59e91011b78106c6352deeeb73013d460abd8..7cd13e9474ffde80aa2fa282afe9ceb294405e38 100644 (file)
@@ -1004,7 +1004,6 @@ out:
 int nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp)
 {
        const struct svc_procedure *proc = rqstp->rq_procinfo;
-       struct kvec *argv = &rqstp->rq_arg.head[0];
        struct kvec *resv = &rqstp->rq_res.head[0];
        __be32 *p;
 
@@ -1015,7 +1014,7 @@ int nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp)
        rqstp->rq_cachetype = proc->pc_cachetype;
 
        svcxdr_init_decode(rqstp);
-       if (!proc->pc_decode(rqstp, argv->iov_base))
+       if (!proc->pc_decode(rqstp, &rqstp->rq_arg_stream))
                goto out_decode_err;
 
        switch (nfsd_cache_lookup(rqstp)) {
@@ -1065,13 +1064,13 @@ out_encode_err:
 /**
  * nfssvc_decode_voidarg - Decode void arguments
  * @rqstp: Server RPC transaction context
- * @p: buffer containing arguments to decode
+ * @xdr: XDR stream positioned at arguments to decode
  *
  * Return values:
  *   %0: Arguments were not valid
  *   %1: Decoding was successful
  */
-int nfssvc_decode_voidarg(struct svc_rqst *rqstp, __be32 *p)
+int nfssvc_decode_voidarg(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
        return 1;
 }
index ddcc18adfeb1acb1fefbca33705150bd232ca305..08e899180ee4331577285e2cee38adef74521cb9 100644 (file)
@@ -273,18 +273,16 @@ svcxdr_encode_fattr(struct svc_rqst *rqstp, struct xdr_stream *xdr,
  */
 
 int
-nfssvc_decode_fhandleargs(struct svc_rqst *rqstp, __be32 *p)
+nfssvc_decode_fhandleargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd_fhandle *args = rqstp->rq_argp;
 
        return svcxdr_decode_fhandle(xdr, &args->fh);
 }
 
 int
-nfssvc_decode_sattrargs(struct svc_rqst *rqstp, __be32 *p)
+nfssvc_decode_sattrargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd_sattrargs *args = rqstp->rq_argp;
 
        return svcxdr_decode_fhandle(xdr, &args->fh) &&
@@ -292,18 +290,16 @@ nfssvc_decode_sattrargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nfssvc_decode_diropargs(struct svc_rqst *rqstp, __be32 *p)
+nfssvc_decode_diropargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd_diropargs *args = rqstp->rq_argp;
 
        return svcxdr_decode_diropargs(xdr, &args->fh, &args->name, &args->len);
 }
 
 int
-nfssvc_decode_readargs(struct svc_rqst *rqstp, __be32 *p)
+nfssvc_decode_readargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd_readargs *args = rqstp->rq_argp;
        u32 totalcount;
 
@@ -321,9 +317,8 @@ nfssvc_decode_readargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nfssvc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p)
+nfssvc_decode_writeargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd_writeargs *args = rqstp->rq_argp;
        u32 beginoffset, totalcount;
 
@@ -350,9 +345,8 @@ nfssvc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nfssvc_decode_createargs(struct svc_rqst *rqstp, __be32 *p)
+nfssvc_decode_createargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd_createargs *args = rqstp->rq_argp;
 
        return svcxdr_decode_diropargs(xdr, &args->fh,
@@ -361,9 +355,8 @@ nfssvc_decode_createargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nfssvc_decode_renameargs(struct svc_rqst *rqstp, __be32 *p)
+nfssvc_decode_renameargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd_renameargs *args = rqstp->rq_argp;
 
        return svcxdr_decode_diropargs(xdr, &args->ffh,
@@ -373,9 +366,8 @@ nfssvc_decode_renameargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nfssvc_decode_linkargs(struct svc_rqst *rqstp, __be32 *p)
+nfssvc_decode_linkargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd_linkargs *args = rqstp->rq_argp;
 
        return svcxdr_decode_fhandle(xdr, &args->ffh) &&
@@ -384,9 +376,8 @@ nfssvc_decode_linkargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nfssvc_decode_symlinkargs(struct svc_rqst *rqstp, __be32 *p)
+nfssvc_decode_symlinkargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd_symlinkargs *args = rqstp->rq_argp;
        struct kvec *head = rqstp->rq_arg.head;
 
@@ -405,9 +396,8 @@ nfssvc_decode_symlinkargs(struct svc_rqst *rqstp, __be32 *p)
 }
 
 int
-nfssvc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p)
+nfssvc_decode_readdirargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
 {
-       struct xdr_stream *xdr = &rqstp->rq_arg_stream;
        struct nfsd_readdirargs *args = rqstp->rq_argp;
 
        if (!svcxdr_decode_fhandle(xdr, &args->fh))
index 80fd6d7f3404a6fde68860c23ecadadde34e772e..804f9af94d6d7293dd63ab15096f167c95928f0f 100644 (file)
@@ -141,16 +141,17 @@ union nfsd_xdrstore {
 #define NFS2_SVC_XDRSIZE       sizeof(union nfsd_xdrstore)
 
 
-int nfssvc_decode_fhandleargs(struct svc_rqst *, __be32 *);
-int nfssvc_decode_sattrargs(struct svc_rqst *, __be32 *);
-int nfssvc_decode_diropargs(struct svc_rqst *, __be32 *);
-int nfssvc_decode_readargs(struct svc_rqst *, __be32 *);
-int nfssvc_decode_writeargs(struct svc_rqst *, __be32 *);
-int nfssvc_decode_createargs(struct svc_rqst *, __be32 *);
-int nfssvc_decode_renameargs(struct svc_rqst *, __be32 *);
-int nfssvc_decode_linkargs(struct svc_rqst *, __be32 *);
-int nfssvc_decode_symlinkargs(struct svc_rqst *, __be32 *);
-int nfssvc_decode_readdirargs(struct svc_rqst *, __be32 *);
+int nfssvc_decode_fhandleargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int nfssvc_decode_sattrargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int nfssvc_decode_diropargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int nfssvc_decode_readargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int nfssvc_decode_writeargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int nfssvc_decode_createargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int nfssvc_decode_renameargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int nfssvc_decode_linkargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int nfssvc_decode_symlinkargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int nfssvc_decode_readdirargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+
 int nfssvc_encode_statres(struct svc_rqst *, __be32 *);
 int nfssvc_encode_attrstatres(struct svc_rqst *, __be32 *);
 int nfssvc_encode_diropres(struct svc_rqst *, __be32 *);
index 712c117300cb746ef3e199ff1f52ccbdd98f2278..60a8909205e5afbf1c7cb1739a4b6205c4188145 100644 (file)
@@ -265,21 +265,22 @@ union nfsd3_xdrstore {
 
 #define NFS3_SVC_XDRSIZE               sizeof(union nfsd3_xdrstore)
 
-int nfs3svc_decode_fhandleargs(struct svc_rqst *, __be32 *);
-int nfs3svc_decode_sattrargs(struct svc_rqst *, __be32 *);
-int nfs3svc_decode_diropargs(struct svc_rqst *, __be32 *);
-int nfs3svc_decode_accessargs(struct svc_rqst *, __be32 *);
-int nfs3svc_decode_readargs(struct svc_rqst *, __be32 *);
-int nfs3svc_decode_writeargs(struct svc_rqst *, __be32 *);
-int nfs3svc_decode_createargs(struct svc_rqst *, __be32 *);
-int nfs3svc_decode_mkdirargs(struct svc_rqst *, __be32 *);
-int nfs3svc_decode_mknodargs(struct svc_rqst *, __be32 *);
-int nfs3svc_decode_renameargs(struct svc_rqst *, __be32 *);
-int nfs3svc_decode_linkargs(struct svc_rqst *, __be32 *);
-int nfs3svc_decode_symlinkargs(struct svc_rqst *, __be32 *);
-int nfs3svc_decode_readdirargs(struct svc_rqst *, __be32 *);
-int nfs3svc_decode_readdirplusargs(struct svc_rqst *, __be32 *);
-int nfs3svc_decode_commitargs(struct svc_rqst *, __be32 *);
+int nfs3svc_decode_fhandleargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int nfs3svc_decode_sattrargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int nfs3svc_decode_diropargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int nfs3svc_decode_accessargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int nfs3svc_decode_readargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int nfs3svc_decode_writeargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int nfs3svc_decode_createargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int nfs3svc_decode_mkdirargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int nfs3svc_decode_mknodargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int nfs3svc_decode_renameargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int nfs3svc_decode_linkargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int nfs3svc_decode_symlinkargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int nfs3svc_decode_readdirargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int nfs3svc_decode_commitargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+
 int nfs3svc_encode_getattrres(struct svc_rqst *, __be32 *);
 int nfs3svc_encode_wccstat(struct svc_rqst *, __be32 *);
 int nfs3svc_encode_lookupres(struct svc_rqst *, __be32 *);
index 3e4052e3bd50eebf43327842fd9822deb36285e1..1d1b8771bdcf01c6e0abf66c5fc3e955844c9bb7 100644 (file)
@@ -756,7 +756,7 @@ set_change_info(struct nfsd4_change_info *cinfo, struct svc_fh *fhp)
 
 
 bool nfsd4_mach_creds_match(struct nfs4_client *cl, struct svc_rqst *rqstp);
-int nfs4svc_decode_compoundargs(struct svc_rqst *, __be32 *);
+int nfs4svc_decode_compoundargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
 int nfs4svc_encode_compoundres(struct svc_rqst *, __be32 *);
 __be32 nfsd4_check_resp_size(struct nfsd4_compoundres *, u32);
 void nfsd4_encode_operation(struct nfsd4_compoundres *, struct nfsd4_op *);
index a98309c0121cb6c34e5fbc65eb61a2868158a544..170ad6f5596a079d70fae539b819261f20fe4d9b 100644 (file)
@@ -96,18 +96,19 @@ struct nlm_reboot {
  */
 #define NLMSVC_XDRSIZE         sizeof(struct nlm_args)
 
-int    nlmsvc_decode_testargs(struct svc_rqst *, __be32 *);
+int    nlmsvc_decode_void(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int    nlmsvc_decode_testargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int    nlmsvc_decode_lockargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int    nlmsvc_decode_cancargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int    nlmsvc_decode_unlockargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int    nlmsvc_decode_res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int    nlmsvc_decode_reboot(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int    nlmsvc_decode_shareargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int    nlmsvc_decode_notify(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+
 int    nlmsvc_encode_testres(struct svc_rqst *, __be32 *);
-int    nlmsvc_decode_lockargs(struct svc_rqst *, __be32 *);
-int    nlmsvc_decode_cancargs(struct svc_rqst *, __be32 *);
-int    nlmsvc_decode_unlockargs(struct svc_rqst *, __be32 *);
 int    nlmsvc_encode_res(struct svc_rqst *, __be32 *);
-int    nlmsvc_decode_res(struct svc_rqst *, __be32 *);
 int    nlmsvc_encode_void(struct svc_rqst *, __be32 *);
-int    nlmsvc_decode_void(struct svc_rqst *, __be32 *);
-int    nlmsvc_decode_shareargs(struct svc_rqst *, __be32 *);
 int    nlmsvc_encode_shareres(struct svc_rqst *, __be32 *);
-int    nlmsvc_decode_notify(struct svc_rqst *, __be32 *);
-int    nlmsvc_decode_reboot(struct svc_rqst *, __be32 *);
 
 #endif /* LOCKD_XDR_H */
index 5ae766f26e04f61e7559bfa233695aad96dee877..68e14e0f2b1fbc5b3c4cc91f60b881db7d251cf9 100644 (file)
 #define        nlm4_fbig               cpu_to_be32(NLM_FBIG)
 #define        nlm4_failed             cpu_to_be32(NLM_FAILED)
 
+int    nlm4svc_decode_void(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int    nlm4svc_decode_testargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int    nlm4svc_decode_lockargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int    nlm4svc_decode_cancargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int    nlm4svc_decode_unlockargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int    nlm4svc_decode_res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int    nlm4svc_decode_reboot(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int    nlm4svc_decode_shareargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+int    nlm4svc_decode_notify(struct svc_rqst *rqstp, struct xdr_stream *xdr);
 
-
-int    nlm4svc_decode_testargs(struct svc_rqst *, __be32 *);
 int    nlm4svc_encode_testres(struct svc_rqst *, __be32 *);
-int    nlm4svc_decode_lockargs(struct svc_rqst *, __be32 *);
-int    nlm4svc_decode_cancargs(struct svc_rqst *, __be32 *);
-int    nlm4svc_decode_unlockargs(struct svc_rqst *, __be32 *);
 int    nlm4svc_encode_res(struct svc_rqst *, __be32 *);
-int    nlm4svc_decode_res(struct svc_rqst *, __be32 *);
 int    nlm4svc_encode_void(struct svc_rqst *, __be32 *);
-int    nlm4svc_decode_void(struct svc_rqst *, __be32 *);
-int    nlm4svc_decode_shareargs(struct svc_rqst *, __be32 *);
 int    nlm4svc_encode_shareres(struct svc_rqst *, __be32 *);
-int    nlm4svc_decode_notify(struct svc_rqst *, __be32 *);
-int    nlm4svc_decode_reboot(struct svc_rqst *, __be32 *);
 
 extern const struct rpc_version nlm_version4;
 
index 4205a6ef4770c63e3d7d4e2a6dff13fa557ba77b..da3c5bc43d85408f61ee9408f054bf9bd78d056f 100644 (file)
@@ -454,7 +454,8 @@ struct svc_procedure {
        /* process the request: */
        __be32                  (*pc_func)(struct svc_rqst *);
        /* XDR decode args: */
-       int                     (*pc_decode)(struct svc_rqst *, __be32 *data);
+       int                     (*pc_decode)(struct svc_rqst *rqstp,
+                                            struct xdr_stream *xdr);
        /* XDR encode result: */
        int                     (*pc_encode)(struct svc_rqst *, __be32 *data);
        /* XDR free result: */