#define PROC(name, xargt, xrest, argt, rest, respsize) \
  { .pc_func    = nlm4svc_proc_##name,  \
    .pc_decode  = nlm4svc_decode_##xargt,       \
-   .pc_encode  = (kxdrproc_t) nlm4svc_encode_##xrest,  \
+   .pc_encode  = nlm4svc_encode_##xrest,       \
    .pc_release = NULL,                                 \
    .pc_argsize = sizeof(struct nlm_##argt),            \
    .pc_ressize = sizeof(struct nlm_##rest),            \
 
 #define PROC(name, xargt, xrest, argt, rest, respsize) \
  { .pc_func    = nlmsvc_proc_##name,                   \
    .pc_decode  = nlmsvc_decode_##xargt,                \
-   .pc_encode  = (kxdrproc_t) nlmsvc_encode_##xrest,   \
+   .pc_encode  = nlmsvc_encode_##xrest,                \
    .pc_release = NULL,                                 \
    .pc_argsize = sizeof(struct nlm_##argt),            \
    .pc_ressize = sizeof(struct nlm_##rest),            \
 
 }
 
 int
-nlmsvc_encode_testres(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp)
+nlmsvc_encode_testres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nlm_res *resp = rqstp->rq_resp;
+
        if (!(p = nlm_encode_testres(p, resp)))
                return 0;
        return xdr_ressize_check(rqstp, p);
 }
 
 int
-nlmsvc_encode_shareres(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp)
+nlmsvc_encode_shareres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nlm_res *resp = rqstp->rq_resp;
+
        if (!(p = nlm_encode_cookie(p, &resp->cookie)))
                return 0;
        *p++ = resp->status;
 }
 
 int
-nlmsvc_encode_res(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp)
+nlmsvc_encode_res(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nlm_res *resp = rqstp->rq_resp;
+
        if (!(p = nlm_encode_cookie(p, &resp->cookie)))
                return 0;
        *p++ = resp->status;
 }
 
 int
-nlmsvc_encode_void(struct svc_rqst *rqstp, __be32 *p, void *dummy)
+nlmsvc_encode_void(struct svc_rqst *rqstp, __be32 *p)
 {
        return xdr_ressize_check(rqstp, p);
 }
 
 }
 
 int
-nlm4svc_encode_testres(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp)
+nlm4svc_encode_testres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nlm_res *resp = rqstp->rq_resp;
+
        if (!(p = nlm4_encode_testres(p, resp)))
                return 0;
        return xdr_ressize_check(rqstp, p);
 }
 
 int
-nlm4svc_encode_shareres(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp)
+nlm4svc_encode_shareres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nlm_res *resp = rqstp->rq_resp;
+
        if (!(p = nlm4_encode_cookie(p, &resp->cookie)))
                return 0;
        *p++ = resp->status;
 }
 
 int
-nlm4svc_encode_res(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp)
+nlm4svc_encode_res(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nlm_res *resp = rqstp->rq_resp;
+
        if (!(p = nlm4_encode_cookie(p, &resp->cookie)))
                return 0;
        *p++ = resp->status;
 }
 
 int
-nlm4svc_encode_void(struct svc_rqst *rqstp, __be32 *p, void *dummy)
+nlm4svc_encode_void(struct svc_rqst *rqstp, __be32 *p)
 {
        return xdr_ressize_check(rqstp, p);
 }
 
        return xdr_argsize_check(rqstp, p);
 }
 
-static int nfs4_encode_void(struct svc_rqst *rqstp, __be32 *p, void *dummy)
+static int nfs4_encode_void(struct svc_rqst *rqstp, __be32 *p)
 {
        return xdr_ressize_check(rqstp, p);
 }
        [CB_NULL] = {
                .pc_func = nfs4_callback_null,
                .pc_decode = nfs4_decode_void,
-               .pc_encode = (kxdrproc_t)nfs4_encode_void,
+               .pc_encode = nfs4_encode_void,
                .pc_xdrressize = 1,
        },
        [CB_COMPOUND] = {
                .pc_func = nfs4_callback_compound,
-               .pc_encode = (kxdrproc_t)nfs4_encode_void,
+               .pc_encode = nfs4_encode_void,
                .pc_argsize = 256,
                .pc_ressize = 256,
                .pc_xdrressize = NFS4_CALLBACK_BUFSIZE,
 
  * There must be an encoding function for void results so svc_process
  * will work properly.
  */
-static int nfsaclsvc_encode_voidres(struct svc_rqst *rqstp, __be32 *p, void *dummy)
+static int nfsaclsvc_encode_voidres(struct svc_rqst *rqstp, __be32 *p)
 {
        return xdr_ressize_check(rqstp, p);
 }
 
 /* GETACL */
-static int nfsaclsvc_encode_getaclres(struct svc_rqst *rqstp, __be32 *p,
-               struct nfsd3_getaclres *resp)
+static int nfsaclsvc_encode_getaclres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd3_getaclres *resp = rqstp->rq_resp;
        struct dentry *dentry = resp->fh.fh_dentry;
        struct inode *inode;
        struct kvec *head = rqstp->rq_res.head;
        return (n > 0);
 }
 
-static int nfsaclsvc_encode_attrstatres(struct svc_rqst *rqstp, __be32 *p,
-               struct nfsd_attrstat *resp)
+static int nfsaclsvc_encode_attrstatres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd_attrstat *resp = rqstp->rq_resp;
+
        p = nfs2svc_encode_fattr(rqstp, p, &resp->fh, &resp->stat);
        return xdr_ressize_check(rqstp, p);
 }
 
 /* ACCESS */
-static int nfsaclsvc_encode_accessres(struct svc_rqst *rqstp, __be32 *p,
-               struct nfsd3_accessres *resp)
+static int nfsaclsvc_encode_accessres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd3_accessres *resp = rqstp->rq_resp;
+
        p = nfs2svc_encode_fattr(rqstp, p, &resp->fh, &resp->stat);
        *p++ = htonl(resp->access);
        return xdr_ressize_check(rqstp, p);
 {                                                                      \
        .pc_func        = nfsacld_proc_##name,                          \
        .pc_decode      = nfsaclsvc_decode_##argt##args,                \
-       .pc_encode      = (kxdrproc_t) nfsaclsvc_encode_##rest##res,    \
+       .pc_encode      = nfsaclsvc_encode_##rest##res,                 \
        .pc_release     = nfsaclsvc_release_##relt,     \
        .pc_argsize     = sizeof(struct nfsd3_##argt##args),            \
        .pc_ressize     = sizeof(struct nfsd3_##rest##res),             \
 
  */
 
 /* GETACL */
-static int nfs3svc_encode_getaclres(struct svc_rqst *rqstp, __be32 *p,
-               struct nfsd3_getaclres *resp)
+static int nfs3svc_encode_getaclres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd3_getaclres *resp = rqstp->rq_resp;
        struct dentry *dentry = resp->fh.fh_dentry;
 
        p = nfs3svc_encode_post_op_attr(rqstp, p, &resp->fh);
 }
 
 /* SETACL */
-static int nfs3svc_encode_setaclres(struct svc_rqst *rqstp, __be32 *p,
-               struct nfsd3_attrstat *resp)
+static int nfs3svc_encode_setaclres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd3_attrstat *resp = rqstp->rq_resp;
+
        p = nfs3svc_encode_post_op_attr(rqstp, p, &resp->fh);
 
        return xdr_ressize_check(rqstp, p);
 {                                                                      \
        .pc_func        = nfsd3_proc_##name,                            \
        .pc_decode      = nfs3svc_decode_##argt##args,                  \
-       .pc_encode      = (kxdrproc_t) nfs3svc_encode_##rest##res,      \
+       .pc_encode      = nfs3svc_encode_##rest##res,                   \
        .pc_release     = nfs3svc_release_##relt,                       \
        .pc_argsize     = sizeof(struct nfsd3_##argt##args),            \
        .pc_ressize     = sizeof(struct nfsd3_##rest##res),             \
 
 static struct svc_procedure            nfsd_procedures3[22] = {
        [NFS3PROC_NULL] = {
                .pc_func = nfsd3_proc_null,
-               .pc_encode = (kxdrproc_t) nfs3svc_encode_voidres,
+               .pc_encode = nfs3svc_encode_voidres,
                .pc_argsize = sizeof(struct nfsd3_voidargs),
                .pc_ressize = sizeof(struct nfsd3_voidres),
                .pc_cachetype = RC_NOCACHE,
        [NFS3PROC_GETATTR] = {
                .pc_func = nfsd3_proc_getattr,
                .pc_decode = nfs3svc_decode_fhandleargs,
-               .pc_encode = (kxdrproc_t) nfs3svc_encode_attrstatres,
+               .pc_encode = nfs3svc_encode_attrstatres,
                .pc_release = nfs3svc_release_fhandle,
                .pc_argsize = sizeof(struct nfsd3_fhandleargs),
                .pc_ressize = sizeof(struct nfsd3_attrstatres),
        [NFS3PROC_SETATTR] = {
                .pc_func = nfsd3_proc_setattr,
                .pc_decode = nfs3svc_decode_sattrargs,
-               .pc_encode = (kxdrproc_t) nfs3svc_encode_wccstatres,
+               .pc_encode = nfs3svc_encode_wccstatres,
                .pc_release = nfs3svc_release_fhandle,
                .pc_argsize = sizeof(struct nfsd3_sattrargs),
                .pc_ressize = sizeof(struct nfsd3_wccstatres),
        [NFS3PROC_LOOKUP] = {
                .pc_func = nfsd3_proc_lookup,
                .pc_decode = nfs3svc_decode_diropargs,
-               .pc_encode = (kxdrproc_t) nfs3svc_encode_diropres,
+               .pc_encode = nfs3svc_encode_diropres,
                .pc_release = nfs3svc_release_fhandle2,
                .pc_argsize = sizeof(struct nfsd3_diropargs),
                .pc_ressize = sizeof(struct nfsd3_diropres),
        [NFS3PROC_ACCESS] = {
                .pc_func = nfsd3_proc_access,
                .pc_decode = nfs3svc_decode_accessargs,
-               .pc_encode = (kxdrproc_t) nfs3svc_encode_accessres,
+               .pc_encode = nfs3svc_encode_accessres,
                .pc_release = nfs3svc_release_fhandle,
                .pc_argsize = sizeof(struct nfsd3_accessargs),
                .pc_ressize = sizeof(struct nfsd3_accessres),
        [NFS3PROC_READLINK] = {
                .pc_func = nfsd3_proc_readlink,
                .pc_decode = nfs3svc_decode_readlinkargs,
-               .pc_encode = (kxdrproc_t) nfs3svc_encode_readlinkres,
+               .pc_encode = nfs3svc_encode_readlinkres,
                .pc_release = nfs3svc_release_fhandle,
                .pc_argsize = sizeof(struct nfsd3_readlinkargs),
                .pc_ressize = sizeof(struct nfsd3_readlinkres),
        [NFS3PROC_READ] = {
                .pc_func = nfsd3_proc_read,
                .pc_decode = nfs3svc_decode_readargs,
-               .pc_encode = (kxdrproc_t) nfs3svc_encode_readres,
+               .pc_encode = nfs3svc_encode_readres,
                .pc_release = nfs3svc_release_fhandle,
                .pc_argsize = sizeof(struct nfsd3_readargs),
                .pc_ressize = sizeof(struct nfsd3_readres),
        [NFS3PROC_WRITE] = {
                .pc_func = nfsd3_proc_write,
                .pc_decode = nfs3svc_decode_writeargs,
-               .pc_encode = (kxdrproc_t) nfs3svc_encode_writeres,
+               .pc_encode = nfs3svc_encode_writeres,
                .pc_release = nfs3svc_release_fhandle,
                .pc_argsize = sizeof(struct nfsd3_writeargs),
                .pc_ressize = sizeof(struct nfsd3_writeres),
        [NFS3PROC_CREATE] = {
                .pc_func = nfsd3_proc_create,
                .pc_decode = nfs3svc_decode_createargs,
-               .pc_encode = (kxdrproc_t) nfs3svc_encode_createres,
+               .pc_encode = nfs3svc_encode_createres,
                .pc_release = nfs3svc_release_fhandle2,
                .pc_argsize = sizeof(struct nfsd3_createargs),
                .pc_ressize = sizeof(struct nfsd3_createres),
        [NFS3PROC_MKDIR] = {
                .pc_func = nfsd3_proc_mkdir,
                .pc_decode = nfs3svc_decode_mkdirargs,
-               .pc_encode = (kxdrproc_t) nfs3svc_encode_createres,
+               .pc_encode = nfs3svc_encode_createres,
                .pc_release = nfs3svc_release_fhandle2,
                .pc_argsize = sizeof(struct nfsd3_mkdirargs),
                .pc_ressize = sizeof(struct nfsd3_createres),
        [NFS3PROC_SYMLINK] = {
                .pc_func = nfsd3_proc_symlink,
                .pc_decode = nfs3svc_decode_symlinkargs,
-               .pc_encode = (kxdrproc_t) nfs3svc_encode_createres,
+               .pc_encode = nfs3svc_encode_createres,
                .pc_release = nfs3svc_release_fhandle2,
                .pc_argsize = sizeof(struct nfsd3_symlinkargs),
                .pc_ressize = sizeof(struct nfsd3_createres),
        [NFS3PROC_MKNOD] = {
                .pc_func = nfsd3_proc_mknod,
                .pc_decode = nfs3svc_decode_mknodargs,
-               .pc_encode = (kxdrproc_t) nfs3svc_encode_createres,
+               .pc_encode = nfs3svc_encode_createres,
                .pc_release = nfs3svc_release_fhandle2,
                .pc_argsize = sizeof(struct nfsd3_mknodargs),
                .pc_ressize = sizeof(struct nfsd3_createres),
        [NFS3PROC_REMOVE] = {
                .pc_func = nfsd3_proc_remove,
                .pc_decode = nfs3svc_decode_diropargs,
-               .pc_encode = (kxdrproc_t) nfs3svc_encode_wccstatres,
+               .pc_encode = nfs3svc_encode_wccstatres,
                .pc_release = nfs3svc_release_fhandle,
                .pc_argsize = sizeof(struct nfsd3_diropargs),
                .pc_ressize = sizeof(struct nfsd3_wccstatres),
        [NFS3PROC_RMDIR] = {
                .pc_func = nfsd3_proc_rmdir,
                .pc_decode = nfs3svc_decode_diropargs,
-               .pc_encode = (kxdrproc_t) nfs3svc_encode_wccstatres,
+               .pc_encode = nfs3svc_encode_wccstatres,
                .pc_release = nfs3svc_release_fhandle,
                .pc_argsize = sizeof(struct nfsd3_diropargs),
                .pc_ressize = sizeof(struct nfsd3_wccstatres),
        [NFS3PROC_RENAME] = {
                .pc_func = nfsd3_proc_rename,
                .pc_decode = nfs3svc_decode_renameargs,
-               .pc_encode = (kxdrproc_t) nfs3svc_encode_renameres,
+               .pc_encode = nfs3svc_encode_renameres,
                .pc_release = nfs3svc_release_fhandle2,
                .pc_argsize = sizeof(struct nfsd3_renameargs),
                .pc_ressize = sizeof(struct nfsd3_renameres),
        [NFS3PROC_LINK] = {
                .pc_func = nfsd3_proc_link,
                .pc_decode = nfs3svc_decode_linkargs,
-               .pc_encode = (kxdrproc_t) nfs3svc_encode_linkres,
+               .pc_encode = nfs3svc_encode_linkres,
                .pc_release = nfs3svc_release_fhandle2,
                .pc_argsize = sizeof(struct nfsd3_linkargs),
                .pc_ressize = sizeof(struct nfsd3_linkres),
        [NFS3PROC_READDIR] = {
                .pc_func = nfsd3_proc_readdir,
                .pc_decode = nfs3svc_decode_readdirargs,
-               .pc_encode = (kxdrproc_t) nfs3svc_encode_readdirres,
+               .pc_encode = nfs3svc_encode_readdirres,
                .pc_release = nfs3svc_release_fhandle,
                .pc_argsize = sizeof(struct nfsd3_readdirargs),
                .pc_ressize = sizeof(struct nfsd3_readdirres),
        [NFS3PROC_READDIRPLUS] = {
                .pc_func = nfsd3_proc_readdirplus,
                .pc_decode = nfs3svc_decode_readdirplusargs,
-               .pc_encode = (kxdrproc_t) nfs3svc_encode_readdirres,
+               .pc_encode = nfs3svc_encode_readdirres,
                .pc_release = nfs3svc_release_fhandle,
                .pc_argsize = sizeof(struct nfsd3_readdirplusargs),
                .pc_ressize = sizeof(struct nfsd3_readdirres),
        [NFS3PROC_FSSTAT] = {
                .pc_func = nfsd3_proc_fsstat,
                .pc_decode = nfs3svc_decode_fhandleargs,
-               .pc_encode = (kxdrproc_t) nfs3svc_encode_fsstatres,
+               .pc_encode = nfs3svc_encode_fsstatres,
                .pc_argsize = sizeof(struct nfsd3_fhandleargs),
                .pc_ressize = sizeof(struct nfsd3_fsstatres),
                .pc_cachetype = RC_NOCACHE,
        [NFS3PROC_FSINFO] = {
                .pc_func = nfsd3_proc_fsinfo,
                .pc_decode = nfs3svc_decode_fhandleargs,
-               .pc_encode = (kxdrproc_t) nfs3svc_encode_fsinfores,
+               .pc_encode = nfs3svc_encode_fsinfores,
                .pc_argsize = sizeof(struct nfsd3_fhandleargs),
                .pc_ressize = sizeof(struct nfsd3_fsinfores),
                .pc_cachetype = RC_NOCACHE,
        [NFS3PROC_PATHCONF] = {
                .pc_func = nfsd3_proc_pathconf,
                .pc_decode = nfs3svc_decode_fhandleargs,
-               .pc_encode = (kxdrproc_t) nfs3svc_encode_pathconfres,
+               .pc_encode = nfs3svc_encode_pathconfres,
                .pc_argsize = sizeof(struct nfsd3_fhandleargs),
                .pc_ressize = sizeof(struct nfsd3_pathconfres),
                .pc_cachetype = RC_NOCACHE,
        [NFS3PROC_COMMIT] = {
                .pc_func = nfsd3_proc_commit,
                .pc_decode = nfs3svc_decode_commitargs,
-               .pc_encode = (kxdrproc_t) nfs3svc_encode_commitres,
+               .pc_encode = nfs3svc_encode_commitres,
                .pc_release = nfs3svc_release_fhandle,
                .pc_argsize = sizeof(struct nfsd3_commitargs),
                .pc_ressize = sizeof(struct nfsd3_commitres),
 
  * will work properly.
  */
 int
-nfs3svc_encode_voidres(struct svc_rqst *rqstp, __be32 *p, void *dummy)
+nfs3svc_encode_voidres(struct svc_rqst *rqstp, __be32 *p)
 {
        return xdr_ressize_check(rqstp, p);
 }
 
 /* GETATTR */
 int
-nfs3svc_encode_attrstat(struct svc_rqst *rqstp, __be32 *p,
-                                       struct nfsd3_attrstat *resp)
+nfs3svc_encode_attrstat(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd3_attrstat *resp = rqstp->rq_resp;
+
        if (resp->status == 0) {
                lease_get_mtime(d_inode(resp->fh.fh_dentry),
                                &resp->stat.mtime);
 
 /* SETATTR, REMOVE, RMDIR */
 int
-nfs3svc_encode_wccstat(struct svc_rqst *rqstp, __be32 *p,
-                                       struct nfsd3_attrstat *resp)
+nfs3svc_encode_wccstat(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd3_attrstat *resp = rqstp->rq_resp;
+
        p = encode_wcc_data(rqstp, p, &resp->fh);
        return xdr_ressize_check(rqstp, p);
 }
 
 /* LOOKUP */
 int
-nfs3svc_encode_diropres(struct svc_rqst *rqstp, __be32 *p,
-                                       struct nfsd3_diropres *resp)
+nfs3svc_encode_diropres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd3_diropres *resp = rqstp->rq_resp;
+
        if (resp->status == 0) {
                p = encode_fh(p, &resp->fh);
                p = encode_post_op_attr(rqstp, p, &resp->fh);
 
 /* ACCESS */
 int
-nfs3svc_encode_accessres(struct svc_rqst *rqstp, __be32 *p,
-                                       struct nfsd3_accessres *resp)
+nfs3svc_encode_accessres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd3_accessres *resp = rqstp->rq_resp;
+
        p = encode_post_op_attr(rqstp, p, &resp->fh);
        if (resp->status == 0)
                *p++ = htonl(resp->access);
 
 /* READLINK */
 int
-nfs3svc_encode_readlinkres(struct svc_rqst *rqstp, __be32 *p,
-                                       struct nfsd3_readlinkres *resp)
+nfs3svc_encode_readlinkres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd3_readlinkres *resp = rqstp->rq_resp;
+
        p = encode_post_op_attr(rqstp, p, &resp->fh);
        if (resp->status == 0) {
                *p++ = htonl(resp->len);
 
 /* READ */
 int
-nfs3svc_encode_readres(struct svc_rqst *rqstp, __be32 *p,
-                                       struct nfsd3_readres *resp)
+nfs3svc_encode_readres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd3_readres *resp = rqstp->rq_resp;
+
        p = encode_post_op_attr(rqstp, p, &resp->fh);
        if (resp->status == 0) {
                *p++ = htonl(resp->count);
 
 /* WRITE */
 int
-nfs3svc_encode_writeres(struct svc_rqst *rqstp, __be32 *p,
-                                       struct nfsd3_writeres *resp)
+nfs3svc_encode_writeres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd3_writeres *resp = rqstp->rq_resp;
        struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
 
        p = encode_wcc_data(rqstp, p, &resp->fh);
 
 /* CREATE, MKDIR, SYMLINK, MKNOD */
 int
-nfs3svc_encode_createres(struct svc_rqst *rqstp, __be32 *p,
-                                       struct nfsd3_diropres *resp)
+nfs3svc_encode_createres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd3_diropres *resp = rqstp->rq_resp;
+
        if (resp->status == 0) {
                *p++ = xdr_one;
                p = encode_fh(p, &resp->fh);
 
 /* RENAME */
 int
-nfs3svc_encode_renameres(struct svc_rqst *rqstp, __be32 *p,
-                                       struct nfsd3_renameres *resp)
+nfs3svc_encode_renameres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd3_renameres *resp = rqstp->rq_resp;
+
        p = encode_wcc_data(rqstp, p, &resp->ffh);
        p = encode_wcc_data(rqstp, p, &resp->tfh);
        return xdr_ressize_check(rqstp, p);
 
 /* LINK */
 int
-nfs3svc_encode_linkres(struct svc_rqst *rqstp, __be32 *p,
-                                       struct nfsd3_linkres *resp)
+nfs3svc_encode_linkres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd3_linkres *resp = rqstp->rq_resp;
+
        p = encode_post_op_attr(rqstp, p, &resp->fh);
        p = encode_wcc_data(rqstp, p, &resp->tfh);
        return xdr_ressize_check(rqstp, p);
 
 /* READDIR */
 int
-nfs3svc_encode_readdirres(struct svc_rqst *rqstp, __be32 *p,
-                                       struct nfsd3_readdirres *resp)
+nfs3svc_encode_readdirres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd3_readdirres *resp = rqstp->rq_resp;
+
        p = encode_post_op_attr(rqstp, p, &resp->fh);
 
        if (resp->status == 0) {
 
 /* FSSTAT */
 int
-nfs3svc_encode_fsstatres(struct svc_rqst *rqstp, __be32 *p,
-                                       struct nfsd3_fsstatres *resp)
+nfs3svc_encode_fsstatres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd3_fsstatres *resp = rqstp->rq_resp;
        struct kstatfs  *s = &resp->stats;
        u64             bs = s->f_bsize;
 
 
 /* FSINFO */
 int
-nfs3svc_encode_fsinfores(struct svc_rqst *rqstp, __be32 *p,
-                                       struct nfsd3_fsinfores *resp)
+nfs3svc_encode_fsinfores(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd3_fsinfores *resp = rqstp->rq_resp;
+
        *p++ = xdr_zero;        /* no post_op_attr */
 
        if (resp->status == 0) {
 
 /* PATHCONF */
 int
-nfs3svc_encode_pathconfres(struct svc_rqst *rqstp, __be32 *p,
-                                       struct nfsd3_pathconfres *resp)
+nfs3svc_encode_pathconfres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd3_pathconfres *resp = rqstp->rq_resp;
+
        *p++ = xdr_zero;        /* no post_op_attr */
 
        if (resp->status == 0) {
 
 /* COMMIT */
 int
-nfs3svc_encode_commitres(struct svc_rqst *rqstp, __be32 *p,
-                                       struct nfsd3_commitres *resp)
+nfs3svc_encode_commitres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd3_commitres *resp = rqstp->rq_resp;
        struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
 
        p = encode_wcc_data(rqstp, p, &resp->fh);
 
 static struct svc_procedure            nfsd_procedures4[2] = {
        [NFSPROC4_NULL] = {
                .pc_func = nfsd4_proc_null,
-               .pc_encode = (kxdrproc_t) nfs4svc_encode_voidres,
+               .pc_encode = nfs4svc_encode_voidres,
                .pc_argsize = sizeof(struct nfsd4_voidargs),
                .pc_ressize = sizeof(struct nfsd4_voidres),
                .pc_cachetype = RC_NOCACHE,
        [NFSPROC4_COMPOUND] = {
                .pc_func = nfsd4_proc_compound,
                .pc_decode = nfs4svc_decode_compoundargs,
-               .pc_encode = (kxdrproc_t) nfs4svc_encode_compoundres,
+               .pc_encode = nfs4svc_encode_compoundres,
                .pc_argsize = sizeof(struct nfsd4_compoundargs),
                .pc_ressize = sizeof(struct nfsd4_compoundres),
                .pc_release = nfsd4_release_compoundargs,
 
 }
 
 int
-nfs4svc_encode_voidres(struct svc_rqst *rqstp, __be32 *p, void *dummy)
+nfs4svc_encode_voidres(struct svc_rqst *rqstp, __be32 *p)
 {
         return xdr_ressize_check(rqstp, p);
 }
 }
 
 int
-nfs4svc_encode_compoundres(struct svc_rqst *rqstp, __be32 *p, struct nfsd4_compoundres *resp)
+nfs4svc_encode_compoundres(struct svc_rqst *rqstp, __be32 *p)
 {
        /*
         * All that remains is to write the tag and operation count...
         */
+       struct nfsd4_compoundres *resp = rqstp->rq_resp;
        struct xdr_buf *buf = resp->xdr.buf;
 
        WARN_ON_ONCE(buf->len != buf->head[0].iov_len + buf->page_len +
 
        [NFSPROC_NULL] = {
                .pc_func = nfsd_proc_null,
                .pc_decode = nfssvc_decode_void,
-               .pc_encode = (kxdrproc_t) nfssvc_encode_void,
+               .pc_encode = nfssvc_encode_void,
                .pc_argsize = sizeof(struct nfsd_void),
                .pc_ressize = sizeof(struct nfsd_void),
                .pc_cachetype = RC_NOCACHE,
        [NFSPROC_GETATTR] = {
                .pc_func = nfsd_proc_getattr,
                .pc_decode = nfssvc_decode_fhandle,
-               .pc_encode = (kxdrproc_t) nfssvc_encode_attrstat,
+               .pc_encode = nfssvc_encode_attrstat,
                .pc_release = nfssvc_release_fhandle,
                .pc_argsize = sizeof(struct nfsd_fhandle),
                .pc_ressize = sizeof(struct nfsd_attrstat),
        [NFSPROC_SETATTR] = {
                .pc_func = nfsd_proc_setattr,
                .pc_decode = nfssvc_decode_sattrargs,
-               .pc_encode = (kxdrproc_t) nfssvc_encode_attrstat,
+               .pc_encode = nfssvc_encode_attrstat,
                .pc_release = nfssvc_release_fhandle,
                .pc_argsize = sizeof(struct nfsd_sattrargs),
                .pc_ressize = sizeof(struct nfsd_attrstat),
        },
        [NFSPROC_ROOT] = {
                .pc_decode = nfssvc_decode_void,
-               .pc_encode = (kxdrproc_t) nfssvc_encode_void,
+               .pc_encode = nfssvc_encode_void,
                .pc_argsize = sizeof(struct nfsd_void),
                .pc_ressize = sizeof(struct nfsd_void),
                .pc_cachetype = RC_NOCACHE,
        [NFSPROC_LOOKUP] = {
                .pc_func = nfsd_proc_lookup,
                .pc_decode = nfssvc_decode_diropargs,
-               .pc_encode = (kxdrproc_t) nfssvc_encode_diropres,
+               .pc_encode = nfssvc_encode_diropres,
                .pc_release = nfssvc_release_fhandle,
                .pc_argsize = sizeof(struct nfsd_diropargs),
                .pc_ressize = sizeof(struct nfsd_diropres),
        [NFSPROC_READLINK] = {
                .pc_func = nfsd_proc_readlink,
                .pc_decode = nfssvc_decode_readlinkargs,
-               .pc_encode = (kxdrproc_t) nfssvc_encode_readlinkres,
+               .pc_encode = nfssvc_encode_readlinkres,
                .pc_argsize = sizeof(struct nfsd_readlinkargs),
                .pc_ressize = sizeof(struct nfsd_readlinkres),
                .pc_cachetype = RC_NOCACHE,
        [NFSPROC_READ] = {
                .pc_func = nfsd_proc_read,
                .pc_decode = nfssvc_decode_readargs,
-               .pc_encode = (kxdrproc_t) nfssvc_encode_readres,
+               .pc_encode = nfssvc_encode_readres,
                .pc_release = nfssvc_release_fhandle,
                .pc_argsize = sizeof(struct nfsd_readargs),
                .pc_ressize = sizeof(struct nfsd_readres),
        },
        [NFSPROC_WRITECACHE] = {
                .pc_decode = nfssvc_decode_void,
-               .pc_encode = (kxdrproc_t) nfssvc_encode_void,
+               .pc_encode = nfssvc_encode_void,
                .pc_argsize = sizeof(struct nfsd_void),
                .pc_ressize = sizeof(struct nfsd_void),
                .pc_cachetype = RC_NOCACHE,
        [NFSPROC_WRITE] = {
                .pc_func = nfsd_proc_write,
                .pc_decode = nfssvc_decode_writeargs,
-               .pc_encode = (kxdrproc_t) nfssvc_encode_attrstat,
+               .pc_encode = nfssvc_encode_attrstat,
                .pc_release = nfssvc_release_fhandle,
                .pc_argsize = sizeof(struct nfsd_writeargs),
                .pc_ressize = sizeof(struct nfsd_attrstat),
        [NFSPROC_CREATE] = {
                .pc_func = nfsd_proc_create,
                .pc_decode = nfssvc_decode_createargs,
-               .pc_encode = (kxdrproc_t) nfssvc_encode_diropres,
+               .pc_encode = nfssvc_encode_diropres,
                .pc_release = nfssvc_release_fhandle,
                .pc_argsize = sizeof(struct nfsd_createargs),
                .pc_ressize = sizeof(struct nfsd_diropres),
        [NFSPROC_REMOVE] = {
                .pc_func = nfsd_proc_remove,
                .pc_decode = nfssvc_decode_diropargs,
-               .pc_encode = (kxdrproc_t) nfssvc_encode_void,
+               .pc_encode = nfssvc_encode_void,
                .pc_argsize = sizeof(struct nfsd_diropargs),
                .pc_ressize = sizeof(struct nfsd_void),
                .pc_cachetype = RC_REPLSTAT,
        [NFSPROC_RENAME] = {
                .pc_func = nfsd_proc_rename,
                .pc_decode = nfssvc_decode_renameargs,
-               .pc_encode = (kxdrproc_t) nfssvc_encode_void,
+               .pc_encode = nfssvc_encode_void,
                .pc_argsize = sizeof(struct nfsd_renameargs),
                .pc_ressize = sizeof(struct nfsd_void),
                .pc_cachetype = RC_REPLSTAT,
        [NFSPROC_LINK] = {
                .pc_func = nfsd_proc_link,
                .pc_decode = nfssvc_decode_linkargs,
-               .pc_encode = (kxdrproc_t) nfssvc_encode_void,
+               .pc_encode = nfssvc_encode_void,
                .pc_argsize = sizeof(struct nfsd_linkargs),
                .pc_ressize = sizeof(struct nfsd_void),
                .pc_cachetype = RC_REPLSTAT,
        [NFSPROC_SYMLINK] = {
                .pc_func = nfsd_proc_symlink,
                .pc_decode = nfssvc_decode_symlinkargs,
-               .pc_encode = (kxdrproc_t) nfssvc_encode_void,
+               .pc_encode = nfssvc_encode_void,
                .pc_argsize = sizeof(struct nfsd_symlinkargs),
                .pc_ressize = sizeof(struct nfsd_void),
                .pc_cachetype = RC_REPLSTAT,
        [NFSPROC_MKDIR] = {
                .pc_func = nfsd_proc_mkdir,
                .pc_decode = nfssvc_decode_createargs,
-               .pc_encode = (kxdrproc_t) nfssvc_encode_diropres,
+               .pc_encode = nfssvc_encode_diropres,
                .pc_release = nfssvc_release_fhandle,
                .pc_argsize = sizeof(struct nfsd_createargs),
                .pc_ressize = sizeof(struct nfsd_diropres),
        [NFSPROC_RMDIR] = {
                .pc_func = nfsd_proc_rmdir,
                .pc_decode = nfssvc_decode_diropargs,
-               .pc_encode = (kxdrproc_t) nfssvc_encode_void,
+               .pc_encode = nfssvc_encode_void,
                .pc_argsize = sizeof(struct nfsd_diropargs),
                .pc_ressize = sizeof(struct nfsd_void),
                .pc_cachetype = RC_REPLSTAT,
        [NFSPROC_READDIR] = {
                .pc_func = nfsd_proc_readdir,
                .pc_decode = nfssvc_decode_readdirargs,
-               .pc_encode = (kxdrproc_t) nfssvc_encode_readdirres,
+               .pc_encode = nfssvc_encode_readdirres,
                .pc_argsize = sizeof(struct nfsd_readdirargs),
                .pc_ressize = sizeof(struct nfsd_readdirres),
                .pc_cachetype = RC_NOCACHE,
        [NFSPROC_STATFS] = {
                .pc_func = nfsd_proc_statfs,
                .pc_decode = nfssvc_decode_fhandle,
-               .pc_encode = (kxdrproc_t) nfssvc_encode_statfsres,
+               .pc_encode = nfssvc_encode_statfsres,
                .pc_argsize = sizeof(struct nfsd_fhandle),
                .pc_ressize = sizeof(struct nfsd_statfsres),
                .pc_cachetype = RC_NOCACHE,
 
 nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp)
 {
        struct svc_procedure    *proc;
-       kxdrproc_t              xdr;
        __be32                  nfserr;
        __be32                  *nfserrp;
 
         * For NFSv2, additional info is never returned in case of an error.
         */
        if (!(nfserr && rqstp->rq_vers == 2)) {
-               xdr = proc->pc_encode;
-               if (xdr && !xdr(rqstp, nfserrp,
-                               rqstp->rq_resp)) {
+               if (proc->pc_encode && !proc->pc_encode(rqstp, nfserrp)) {
                        /* Failed to encode result. Release cache entry */
                        dprintk("nfsd: failed to encode result!\n");
                        nfsd_cache_update(rqstp, RC_NOCACHE, NULL);
 
  * XDR encode functions
  */
 int
-nfssvc_encode_void(struct svc_rqst *rqstp, __be32 *p, void *dummy)
+nfssvc_encode_void(struct svc_rqst *rqstp, __be32 *p)
 {
        return xdr_ressize_check(rqstp, p);
 }
 
 int
-nfssvc_encode_attrstat(struct svc_rqst *rqstp, __be32 *p,
-                                       struct nfsd_attrstat *resp)
+nfssvc_encode_attrstat(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd_attrstat *resp = rqstp->rq_resp;
+
        p = encode_fattr(rqstp, p, &resp->fh, &resp->stat);
        return xdr_ressize_check(rqstp, p);
 }
 
 int
-nfssvc_encode_diropres(struct svc_rqst *rqstp, __be32 *p,
-                                       struct nfsd_diropres *resp)
+nfssvc_encode_diropres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd_diropres *resp = rqstp->rq_resp;
+
        p = encode_fh(p, &resp->fh);
        p = encode_fattr(rqstp, p, &resp->fh, &resp->stat);
        return xdr_ressize_check(rqstp, p);
 }
 
 int
-nfssvc_encode_readlinkres(struct svc_rqst *rqstp, __be32 *p,
-                                       struct nfsd_readlinkres *resp)
+nfssvc_encode_readlinkres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd_readlinkres *resp = rqstp->rq_resp;
+
        *p++ = htonl(resp->len);
        xdr_ressize_check(rqstp, p);
        rqstp->rq_res.page_len = resp->len;
 }
 
 int
-nfssvc_encode_readres(struct svc_rqst *rqstp, __be32 *p,
-                                       struct nfsd_readres *resp)
+nfssvc_encode_readres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd_readres *resp = rqstp->rq_resp;
+
        p = encode_fattr(rqstp, p, &resp->fh, &resp->stat);
        *p++ = htonl(resp->count);
        xdr_ressize_check(rqstp, p);
 }
 
 int
-nfssvc_encode_readdirres(struct svc_rqst *rqstp, __be32 *p,
-                                       struct nfsd_readdirres *resp)
+nfssvc_encode_readdirres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd_readdirres *resp = rqstp->rq_resp;
+
        xdr_ressize_check(rqstp, p);
        p = resp->buffer;
        *p++ = 0;                       /* no more entries */
 }
 
 int
-nfssvc_encode_statfsres(struct svc_rqst *rqstp, __be32 *p,
-                                       struct nfsd_statfsres *resp)
+nfssvc_encode_statfsres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct nfsd_statfsres *resp = rqstp->rq_resp;
        struct kstatfs  *stat = &resp->stats;
 
        *p++ = htonl(NFSSVC_MAXBLKSIZE_V2);     /* max transfer size */
 
 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_encode_void(struct svc_rqst *, __be32 *, void *);
-int nfssvc_encode_attrstat(struct svc_rqst *, __be32 *, struct nfsd_attrstat *);
-int nfssvc_encode_diropres(struct svc_rqst *, __be32 *, struct nfsd_diropres *);
-int nfssvc_encode_readlinkres(struct svc_rqst *, __be32 *, struct nfsd_readlinkres *);
-int nfssvc_encode_readres(struct svc_rqst *, __be32 *, struct nfsd_readres *);
-int nfssvc_encode_statfsres(struct svc_rqst *, __be32 *, struct nfsd_statfsres *);
-int nfssvc_encode_readdirres(struct svc_rqst *, __be32 *, struct nfsd_readdirres *);
+int nfssvc_encode_void(struct svc_rqst *, __be32 *);
+int nfssvc_encode_attrstat(struct svc_rqst *, __be32 *);
+int nfssvc_encode_diropres(struct svc_rqst *, __be32 *);
+int nfssvc_encode_readlinkres(struct svc_rqst *, __be32 *);
+int nfssvc_encode_readres(struct svc_rqst *, __be32 *);
+int nfssvc_encode_statfsres(struct svc_rqst *, __be32 *);
+int nfssvc_encode_readdirres(struct svc_rqst *, __be32 *);
 
 int nfssvc_encode_entry(void *, const char *name,
                        int namlen, loff_t offset, u64 ino, unsigned int);
 
 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_encode_voidres(struct svc_rqst *, __be32 *, void *);
-int nfs3svc_encode_attrstat(struct svc_rqst *, __be32 *,
-                               struct nfsd3_attrstat *);
-int nfs3svc_encode_wccstat(struct svc_rqst *, __be32 *,
-                               struct nfsd3_attrstat *);
-int nfs3svc_encode_diropres(struct svc_rqst *, __be32 *,
-                               struct nfsd3_diropres *);
-int nfs3svc_encode_accessres(struct svc_rqst *, __be32 *,
-                               struct nfsd3_accessres *);
-int nfs3svc_encode_readlinkres(struct svc_rqst *, __be32 *,
-                               struct nfsd3_readlinkres *);
-int nfs3svc_encode_readres(struct svc_rqst *, __be32 *, struct nfsd3_readres *);
-int nfs3svc_encode_writeres(struct svc_rqst *, __be32 *, struct nfsd3_writeres *);
-int nfs3svc_encode_createres(struct svc_rqst *, __be32 *,
-                               struct nfsd3_diropres *);
-int nfs3svc_encode_renameres(struct svc_rqst *, __be32 *,
-                               struct nfsd3_renameres *);
-int nfs3svc_encode_linkres(struct svc_rqst *, __be32 *,
-                               struct nfsd3_linkres *);
-int nfs3svc_encode_readdirres(struct svc_rqst *, __be32 *,
-                               struct nfsd3_readdirres *);
-int nfs3svc_encode_fsstatres(struct svc_rqst *, __be32 *,
-                               struct nfsd3_fsstatres *);
-int nfs3svc_encode_fsinfores(struct svc_rqst *, __be32 *,
-                               struct nfsd3_fsinfores *);
-int nfs3svc_encode_pathconfres(struct svc_rqst *, __be32 *,
-                               struct nfsd3_pathconfres *);
-int nfs3svc_encode_commitres(struct svc_rqst *, __be32 *,
-                               struct nfsd3_commitres *);
+int nfs3svc_encode_voidres(struct svc_rqst *, __be32 *);
+int nfs3svc_encode_attrstat(struct svc_rqst *, __be32 *);
+int nfs3svc_encode_wccstat(struct svc_rqst *, __be32 *);
+int nfs3svc_encode_diropres(struct svc_rqst *, __be32 *);
+int nfs3svc_encode_accessres(struct svc_rqst *, __be32 *);
+int nfs3svc_encode_readlinkres(struct svc_rqst *, __be32 *);
+int nfs3svc_encode_readres(struct svc_rqst *, __be32 *);
+int nfs3svc_encode_writeres(struct svc_rqst *, __be32 *);
+int nfs3svc_encode_createres(struct svc_rqst *, __be32 *);
+int nfs3svc_encode_renameres(struct svc_rqst *, __be32 *);
+int nfs3svc_encode_linkres(struct svc_rqst *, __be32 *);
+int nfs3svc_encode_readdirres(struct svc_rqst *, __be32 *);
+int nfs3svc_encode_fsstatres(struct svc_rqst *, __be32 *);
+int nfs3svc_encode_fsinfores(struct svc_rqst *, __be32 *);
+int nfs3svc_encode_pathconfres(struct svc_rqst *, __be32 *);
+int nfs3svc_encode_commitres(struct svc_rqst *, __be32 *);
 
 void nfs3svc_release_fhandle(struct svc_rqst *);
 void nfs3svc_release_fhandle2(struct svc_rqst *);
 
 
 
 bool nfsd4_mach_creds_match(struct nfs4_client *cl, struct svc_rqst *rqstp);
-int nfs4svc_encode_voidres(struct svc_rqst *, __be32 *, void *);
+int nfs4svc_encode_voidres(struct svc_rqst *, __be32 *);
 int nfs4svc_decode_compoundargs(struct svc_rqst *, __be32 *);
-int nfs4svc_encode_compoundres(struct svc_rqst *, __be32 *,
-               struct nfsd4_compoundres *);
+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 *);
 void nfsd4_encode_replay(struct xdr_stream *xdr, struct nfsd4_op *op);
 
 #define NLMSVC_XDRSIZE         sizeof(struct nlm_args)
 
 int    nlmsvc_decode_testargs(struct svc_rqst *, __be32 *);
-int    nlmsvc_encode_testres(struct svc_rqst *, __be32 *, struct nlm_res *);
+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 *, struct nlm_res *);
+int    nlmsvc_encode_res(struct svc_rqst *, __be32 *);
 int    nlmsvc_decode_res(struct svc_rqst *, __be32 *);
-int    nlmsvc_encode_void(struct svc_rqst *, __be32 *, void *);
+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 *, struct nlm_res *);
+int    nlmsvc_encode_shareres(struct svc_rqst *, __be32 *);
 int    nlmsvc_decode_notify(struct svc_rqst *, __be32 *);
 int    nlmsvc_decode_reboot(struct svc_rqst *, __be32 *);
 /*
 
 
 
 int    nlm4svc_decode_testargs(struct svc_rqst *, __be32 *);
-int    nlm4svc_encode_testres(struct svc_rqst *, __be32 *, struct nlm_res *);
+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 *, struct nlm_res *);
+int    nlm4svc_encode_res(struct svc_rqst *, __be32 *);
 int    nlm4svc_decode_res(struct svc_rqst *, __be32 *);
-int    nlm4svc_encode_void(struct svc_rqst *, __be32 *, void *);
+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 *, struct nlm_res *);
+int    nlm4svc_encode_shareres(struct svc_rqst *, __be32 *);
 int    nlm4svc_decode_notify(struct svc_rqst *, __be32 *);
 int    nlm4svc_decode_reboot(struct svc_rqst *, __be32 *);
 /*
 
        __be32                  (*pc_func)(struct svc_rqst *);
        /* XDR decode args: */
        int                     (*pc_decode)(struct svc_rqst *, __be32 *data);
-       kxdrproc_t              pc_encode;      /* XDR encode result */
+       /* XDR encode result: */
+       int                     (*pc_encode)(struct svc_rqst *, __be32 *data);
        /* XDR free result: */
        void                    (*pc_release)(struct svc_rqst *);
        unsigned int            pc_argsize;     /* argument struct size */
 
        struct svc_version      *versp = NULL;  /* compiler food */
        struct svc_procedure    *procp = NULL;
        struct svc_serv         *serv = rqstp->rq_server;
-       kxdrproc_t              xdr;
        __be32                  *statp;
        u32                     prog, vers, proc;
        __be32                  auth_stat, rpc_stat;
                                procp->pc_release(rqstp);
                        goto err_bad_auth;
                }
-               if (*statp == rpc_success &&
-                   (xdr = procp->pc_encode) &&
-                   !xdr(rqstp, resv->iov_base+resv->iov_len, rqstp->rq_resp)) {
+               if (*statp == rpc_success && procp->pc_encode &&
+                   !procp->pc_encode(rqstp, resv->iov_base + resv->iov_len)) {
                        dprintk("svc: failed to encode reply\n");
                        /* serv->sv_stats->rpcsystemerr++; */
                        *statp = rpc_system_err;