mirror of
https://github.com/torvalds/linux.git
synced 2024-12-29 06:12:08 +00:00
sunrpc: properly type pc_encode callbacks
Drop the resp argument as it can trivially be derived from the rqstp argument. With that all functions now have the same prototype, and we can remove the unsafe casting to kxdrproc_t. Signed-off-by: Christoph Hellwig <hch@lst.de> Acked-by: Trond Myklebust <trond.myklebust@primarydata.com>
This commit is contained in:
parent
026fec7e7c
commit
63f8de3795
@ -497,7 +497,7 @@ struct nlm_void { int dummy; };
|
||||
#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), \
|
||||
|
@ -539,7 +539,7 @@ struct nlm_void { int dummy; };
|
||||
#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), \
|
||||
|
@ -200,8 +200,10 @@ nlmsvc_decode_testargs(struct svc_rqst *rqstp, __be32 *p)
|
||||
}
|
||||
|
||||
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);
|
||||
@ -280,8 +282,10 @@ nlmsvc_decode_shareargs(struct svc_rqst *rqstp, __be32 *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;
|
||||
@ -290,8 +294,10 @@ nlmsvc_encode_shareres(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp)
|
||||
}
|
||||
|
||||
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;
|
||||
@ -342,7 +348,7 @@ nlmsvc_decode_void(struct svc_rqst *rqstp, __be32 *p)
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
@ -197,8 +197,10 @@ nlm4svc_decode_testargs(struct svc_rqst *rqstp, __be32 *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);
|
||||
@ -277,8 +279,10 @@ nlm4svc_decode_shareargs(struct svc_rqst *rqstp, __be32 *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;
|
||||
@ -287,8 +291,10 @@ nlm4svc_encode_shareres(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp)
|
||||
}
|
||||
|
||||
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;
|
||||
@ -339,7 +345,7 @@ nlm4svc_decode_void(struct svc_rqst *rqstp, __be32 *p)
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
@ -63,7 +63,7 @@ static int nfs4_decode_void(struct svc_rqst *rqstp, __be32 *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);
|
||||
}
|
||||
@ -999,12 +999,12 @@ static struct svc_procedure nfs4_callback_procedures1[] = {
|
||||
[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,
|
||||
|
@ -251,15 +251,15 @@ static int nfsaclsvc_decode_accessargs(struct svc_rqst *rqstp, __be32 *p)
|
||||
* 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;
|
||||
@ -302,17 +302,19 @@ static int nfsaclsvc_encode_getaclres(struct svc_rqst *rqstp, __be32 *p,
|
||||
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);
|
||||
@ -355,7 +357,7 @@ struct nfsd3_voidargs { int dummy; };
|
||||
{ \
|
||||
.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), \
|
||||
|
@ -168,9 +168,9 @@ static int nfs3svc_decode_setaclargs(struct svc_rqst *rqstp, __be32 *p)
|
||||
*/
|
||||
|
||||
/* 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);
|
||||
@ -213,9 +213,10 @@ static int nfs3svc_encode_getaclres(struct svc_rqst *rqstp, __be32 *p,
|
||||
}
|
||||
|
||||
/* 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);
|
||||
@ -243,7 +244,7 @@ struct nfsd3_voidargs { int dummy; };
|
||||
{ \
|
||||
.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), \
|
||||
|
@ -677,7 +677,7 @@ struct nfsd3_voidargs { int dummy; };
|
||||
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,
|
||||
@ -686,7 +686,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
|
||||
[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),
|
||||
@ -696,7 +696,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
|
||||
[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),
|
||||
@ -706,7 +706,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
|
||||
[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),
|
||||
@ -716,7 +716,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
|
||||
[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),
|
||||
@ -726,7 +726,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
|
||||
[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),
|
||||
@ -736,7 +736,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
|
||||
[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),
|
||||
@ -746,7 +746,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
|
||||
[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),
|
||||
@ -756,7 +756,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
|
||||
[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),
|
||||
@ -766,7 +766,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
|
||||
[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),
|
||||
@ -776,7 +776,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
|
||||
[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),
|
||||
@ -786,7 +786,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
|
||||
[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),
|
||||
@ -796,7 +796,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
|
||||
[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),
|
||||
@ -806,7 +806,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
|
||||
[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),
|
||||
@ -816,7 +816,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
|
||||
[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),
|
||||
@ -826,7 +826,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
|
||||
[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),
|
||||
@ -836,7 +836,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
|
||||
[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),
|
||||
@ -845,7 +845,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
|
||||
[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),
|
||||
@ -854,7 +854,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
|
||||
[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,
|
||||
@ -863,7 +863,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
|
||||
[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,
|
||||
@ -872,7 +872,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
|
||||
[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,
|
||||
@ -881,7 +881,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
|
||||
[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),
|
||||
|
@ -645,16 +645,17 @@ nfs3svc_decode_commitargs(struct svc_rqst *rqstp, __be32 *p)
|
||||
* 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);
|
||||
@ -665,18 +666,20 @@ nfs3svc_encode_attrstat(struct svc_rqst *rqstp, __be32 *p,
|
||||
|
||||
/* 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);
|
||||
@ -687,9 +690,10 @@ nfs3svc_encode_diropres(struct svc_rqst *rqstp, __be32 *p,
|
||||
|
||||
/* 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);
|
||||
@ -698,9 +702,10 @@ nfs3svc_encode_accessres(struct svc_rqst *rqstp, __be32 *p,
|
||||
|
||||
/* 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);
|
||||
@ -719,9 +724,10 @@ nfs3svc_encode_readlinkres(struct svc_rqst *rqstp, __be32 *p,
|
||||
|
||||
/* 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);
|
||||
@ -743,9 +749,9 @@ nfs3svc_encode_readres(struct svc_rqst *rqstp, __be32 *p,
|
||||
|
||||
/* 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);
|
||||
@ -760,9 +766,10 @@ nfs3svc_encode_writeres(struct svc_rqst *rqstp, __be32 *p,
|
||||
|
||||
/* 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);
|
||||
@ -774,9 +781,10 @@ nfs3svc_encode_createres(struct svc_rqst *rqstp, __be32 *p,
|
||||
|
||||
/* 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);
|
||||
@ -784,9 +792,10 @@ nfs3svc_encode_renameres(struct svc_rqst *rqstp, __be32 *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);
|
||||
@ -794,9 +803,10 @@ nfs3svc_encode_linkres(struct svc_rqst *rqstp, __be32 *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) {
|
||||
@ -1044,9 +1054,9 @@ nfs3svc_encode_entry_plus(void *cd, const char *name,
|
||||
|
||||
/* 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;
|
||||
|
||||
@ -1066,9 +1076,10 @@ nfs3svc_encode_fsstatres(struct svc_rqst *rqstp, __be32 *p,
|
||||
|
||||
/* 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) {
|
||||
@ -1090,9 +1101,10 @@ nfs3svc_encode_fsinfores(struct svc_rqst *rqstp, __be32 *p,
|
||||
|
||||
/* 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) {
|
||||
@ -1109,9 +1121,9 @@ nfs3svc_encode_pathconfres(struct svc_rqst *rqstp, __be32 *p,
|
||||
|
||||
/* 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);
|
||||
|
@ -2520,7 +2520,7 @@ struct nfsd4_voidargs { int dummy; };
|
||||
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,
|
||||
@ -2529,7 +2529,7 @@ static struct svc_procedure nfsd_procedures4[2] = {
|
||||
[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,
|
||||
|
@ -4538,7 +4538,7 @@ nfsd4_encode_replay(struct xdr_stream *xdr, struct nfsd4_op *op)
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
@ -4584,11 +4584,12 @@ nfs4svc_decode_compoundargs(struct svc_rqst *rqstp, __be32 *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 +
|
||||
|
@ -577,7 +577,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
|
||||
[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,
|
||||
@ -586,7 +586,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
|
||||
[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),
|
||||
@ -596,7 +596,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
|
||||
[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),
|
||||
@ -605,7 +605,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
|
||||
},
|
||||
[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,
|
||||
@ -614,7 +614,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
|
||||
[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),
|
||||
@ -624,7 +624,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
|
||||
[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,
|
||||
@ -633,7 +633,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
|
||||
[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),
|
||||
@ -642,7 +642,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
|
||||
},
|
||||
[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,
|
||||
@ -651,7 +651,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
|
||||
[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),
|
||||
@ -661,7 +661,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
|
||||
[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),
|
||||
@ -671,7 +671,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
|
||||
[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,
|
||||
@ -680,7 +680,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
|
||||
[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,
|
||||
@ -689,7 +689,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
|
||||
[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,
|
||||
@ -698,7 +698,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
|
||||
[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,
|
||||
@ -707,7 +707,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
|
||||
[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),
|
||||
@ -717,7 +717,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
|
||||
[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,
|
||||
@ -726,7 +726,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
|
||||
[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,
|
||||
@ -734,7 +734,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
|
||||
[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,
|
||||
|
@ -782,7 +782,6 @@ int
|
||||
nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp)
|
||||
{
|
||||
struct svc_procedure *proc;
|
||||
kxdrproc_t xdr;
|
||||
__be32 nfserr;
|
||||
__be32 *nfserrp;
|
||||
|
||||
@ -841,9 +840,7 @@ nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp)
|
||||
* 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);
|
||||
|
@ -429,32 +429,35 @@ nfssvc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p)
|
||||
* 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;
|
||||
@ -468,9 +471,10 @@ nfssvc_encode_readlinkres(struct svc_rqst *rqstp, __be32 *p,
|
||||
}
|
||||
|
||||
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);
|
||||
@ -487,9 +491,10 @@ nfssvc_encode_readres(struct svc_rqst *rqstp, __be32 *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 */
|
||||
@ -500,9 +505,9 @@ nfssvc_encode_readdirres(struct svc_rqst *rqstp, __be32 *p,
|
||||
}
|
||||
|
||||
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 */
|
||||
|
@ -143,13 +143,13 @@ int nfssvc_decode_readlinkargs(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_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);
|
||||
|
@ -285,35 +285,22 @@ 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_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 *);
|
||||
|
@ -682,10 +682,9 @@ 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_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);
|
||||
|
@ -96,16 +96,16 @@ struct nlm_reboot {
|
||||
#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 *);
|
||||
/*
|
||||
|
@ -24,16 +24,16 @@
|
||||
|
||||
|
||||
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 *);
|
||||
/*
|
||||
|
@ -423,7 +423,8 @@ struct svc_procedure {
|
||||
__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 */
|
||||
|
@ -1154,7 +1154,6 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv)
|
||||
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;
|
||||
@ -1298,9 +1297,8 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv)
|
||||
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;
|
||||
|
Loading…
Reference in New Issue
Block a user