summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2017-05-08 12:48:24 -0400
committerChristoph Hellwig <hch@lst.de>2017-05-15 11:42:23 -0400
commit8537488b5a2f33980e33f654b0a515304de2b267 (patch)
tree6132f630283d5fd2c6370c496eae0cd47d51635c
parenta6beb73272b4c0108e41bc7c7b5a447ae6c92863 (diff)
sunrpc: properly type pc_release callbacks
Drop the p and resp arguments as they are always NULL or 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>
-rw-r--r--fs/nfsd/nfs2acl.c22
-rw-r--r--fs/nfsd/nfs3acl.c8
-rw-r--r--fs/nfsd/nfs3proc.c36
-rw-r--r--fs/nfsd/nfs3xdr.c16
-rw-r--r--fs/nfsd/nfs4xdr.c4
-rw-r--r--fs/nfsd/nfsproc.c14
-rw-r--r--fs/nfsd/nfsxdr.c8
-rw-r--r--fs/nfsd/xdr.h2
-rw-r--r--fs/nfsd/xdr3.h6
-rw-r--r--fs/nfsd/xdr4.h2
-rw-r--r--include/linux/sunrpc/svc.h3
-rw-r--r--net/sunrpc/svc.c8
12 files changed, 63 insertions, 66 deletions
diff --git a/fs/nfsd/nfs2acl.c b/fs/nfsd/nfs2acl.c
index 4b7f84fa1fa5..302441027f50 100644
--- a/fs/nfsd/nfs2acl.c
+++ b/fs/nfsd/nfs2acl.c
@@ -318,27 +318,27 @@ static int nfsaclsvc_encode_accessres(struct svc_rqst *rqstp, __be32 *p,
318/* 318/*
319 * XDR release functions 319 * XDR release functions
320 */ 320 */
321static int nfsaclsvc_release_getacl(struct svc_rqst *rqstp, __be32 *p, 321static void nfsaclsvc_release_getacl(struct svc_rqst *rqstp)
322 struct nfsd3_getaclres *resp)
323{ 322{
323 struct nfsd3_getaclres *resp = rqstp->rq_resp;
324
324 fh_put(&resp->fh); 325 fh_put(&resp->fh);
325 posix_acl_release(resp->acl_access); 326 posix_acl_release(resp->acl_access);
326 posix_acl_release(resp->acl_default); 327 posix_acl_release(resp->acl_default);
327 return 1;
328} 328}
329 329
330static int nfsaclsvc_release_attrstat(struct svc_rqst *rqstp, __be32 *p, 330static void nfsaclsvc_release_attrstat(struct svc_rqst *rqstp)
331 struct nfsd_attrstat *resp)
332{ 331{
332 struct nfsd_attrstat *resp = rqstp->rq_resp;
333
333 fh_put(&resp->fh); 334 fh_put(&resp->fh);
334 return 1;
335} 335}
336 336
337static int nfsaclsvc_release_access(struct svc_rqst *rqstp, __be32 *p, 337static void nfsaclsvc_release_access(struct svc_rqst *rqstp)
338 struct nfsd3_accessres *resp)
339{ 338{
340 fh_put(&resp->fh); 339 struct nfsd3_accessres *resp = rqstp->rq_resp;
341 return 1; 340
341 fh_put(&resp->fh);
342} 342}
343 343
344#define nfsaclsvc_decode_voidargs NULL 344#define nfsaclsvc_decode_voidargs NULL
@@ -353,7 +353,7 @@ struct nfsd3_voidargs { int dummy; };
353 .pc_func = nfsacld_proc_##name, \ 353 .pc_func = nfsacld_proc_##name, \
354 .pc_decode = (kxdrproc_t) nfsaclsvc_decode_##argt##args, \ 354 .pc_decode = (kxdrproc_t) nfsaclsvc_decode_##argt##args, \
355 .pc_encode = (kxdrproc_t) nfsaclsvc_encode_##rest##res, \ 355 .pc_encode = (kxdrproc_t) nfsaclsvc_encode_##rest##res, \
356 .pc_release = (kxdrproc_t) nfsaclsvc_release_##relt, \ 356 .pc_release = nfsaclsvc_release_##relt, \
357 .pc_argsize = sizeof(struct nfsd3_##argt##args), \ 357 .pc_argsize = sizeof(struct nfsd3_##argt##args), \
358 .pc_ressize = sizeof(struct nfsd3_##rest##res), \ 358 .pc_ressize = sizeof(struct nfsd3_##rest##res), \
359 .pc_cachetype = cache, \ 359 .pc_cachetype = cache, \
diff --git a/fs/nfsd/nfs3acl.c b/fs/nfsd/nfs3acl.c
index 5e42004035e0..56cdff4e954c 100644
--- a/fs/nfsd/nfs3acl.c
+++ b/fs/nfsd/nfs3acl.c
@@ -223,13 +223,13 @@ static int nfs3svc_encode_setaclres(struct svc_rqst *rqstp, __be32 *p,
223/* 223/*
224 * XDR release functions 224 * XDR release functions
225 */ 225 */
226static int nfs3svc_release_getacl(struct svc_rqst *rqstp, __be32 *p, 226static void nfs3svc_release_getacl(struct svc_rqst *rqstp)
227 struct nfsd3_getaclres *resp)
228{ 227{
228 struct nfsd3_getaclres *resp = rqstp->rq_resp;
229
229 fh_put(&resp->fh); 230 fh_put(&resp->fh);
230 posix_acl_release(resp->acl_access); 231 posix_acl_release(resp->acl_access);
231 posix_acl_release(resp->acl_default); 232 posix_acl_release(resp->acl_default);
232 return 1;
233} 233}
234 234
235#define nfs3svc_decode_voidargs NULL 235#define nfs3svc_decode_voidargs NULL
@@ -243,7 +243,7 @@ struct nfsd3_voidargs { int dummy; };
243 .pc_func = nfsd3_proc_##name, \ 243 .pc_func = nfsd3_proc_##name, \
244 .pc_decode = (kxdrproc_t) nfs3svc_decode_##argt##args, \ 244 .pc_decode = (kxdrproc_t) nfs3svc_decode_##argt##args, \
245 .pc_encode = (kxdrproc_t) nfs3svc_encode_##rest##res, \ 245 .pc_encode = (kxdrproc_t) nfs3svc_encode_##rest##res, \
246 .pc_release = (kxdrproc_t) nfs3svc_release_##relt, \ 246 .pc_release = nfs3svc_release_##relt, \
247 .pc_argsize = sizeof(struct nfsd3_##argt##args), \ 247 .pc_argsize = sizeof(struct nfsd3_##argt##args), \
248 .pc_ressize = sizeof(struct nfsd3_##rest##res), \ 248 .pc_ressize = sizeof(struct nfsd3_##rest##res), \
249 .pc_cachetype = cache, \ 249 .pc_cachetype = cache, \
diff --git a/fs/nfsd/nfs3proc.c b/fs/nfsd/nfs3proc.c
index 4a2bae07cfbf..f0cccc0768ce 100644
--- a/fs/nfsd/nfs3proc.c
+++ b/fs/nfsd/nfs3proc.c
@@ -687,7 +687,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
687 .pc_func = nfsd3_proc_getattr, 687 .pc_func = nfsd3_proc_getattr,
688 .pc_decode = (kxdrproc_t) nfs3svc_decode_fhandleargs, 688 .pc_decode = (kxdrproc_t) nfs3svc_decode_fhandleargs,
689 .pc_encode = (kxdrproc_t) nfs3svc_encode_attrstatres, 689 .pc_encode = (kxdrproc_t) nfs3svc_encode_attrstatres,
690 .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, 690 .pc_release = nfs3svc_release_fhandle,
691 .pc_argsize = sizeof(struct nfsd3_fhandleargs), 691 .pc_argsize = sizeof(struct nfsd3_fhandleargs),
692 .pc_ressize = sizeof(struct nfsd3_attrstatres), 692 .pc_ressize = sizeof(struct nfsd3_attrstatres),
693 .pc_cachetype = RC_NOCACHE, 693 .pc_cachetype = RC_NOCACHE,
@@ -697,7 +697,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
697 .pc_func = nfsd3_proc_setattr, 697 .pc_func = nfsd3_proc_setattr,
698 .pc_decode = (kxdrproc_t) nfs3svc_decode_sattrargs, 698 .pc_decode = (kxdrproc_t) nfs3svc_decode_sattrargs,
699 .pc_encode = (kxdrproc_t) nfs3svc_encode_wccstatres, 699 .pc_encode = (kxdrproc_t) nfs3svc_encode_wccstatres,
700 .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, 700 .pc_release = nfs3svc_release_fhandle,
701 .pc_argsize = sizeof(struct nfsd3_sattrargs), 701 .pc_argsize = sizeof(struct nfsd3_sattrargs),
702 .pc_ressize = sizeof(struct nfsd3_wccstatres), 702 .pc_ressize = sizeof(struct nfsd3_wccstatres),
703 .pc_cachetype = RC_REPLBUFF, 703 .pc_cachetype = RC_REPLBUFF,
@@ -707,7 +707,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
707 .pc_func = nfsd3_proc_lookup, 707 .pc_func = nfsd3_proc_lookup,
708 .pc_decode = (kxdrproc_t) nfs3svc_decode_diropargs, 708 .pc_decode = (kxdrproc_t) nfs3svc_decode_diropargs,
709 .pc_encode = (kxdrproc_t) nfs3svc_encode_diropres, 709 .pc_encode = (kxdrproc_t) nfs3svc_encode_diropres,
710 .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2, 710 .pc_release = nfs3svc_release_fhandle2,
711 .pc_argsize = sizeof(struct nfsd3_diropargs), 711 .pc_argsize = sizeof(struct nfsd3_diropargs),
712 .pc_ressize = sizeof(struct nfsd3_diropres), 712 .pc_ressize = sizeof(struct nfsd3_diropres),
713 .pc_cachetype = RC_NOCACHE, 713 .pc_cachetype = RC_NOCACHE,
@@ -717,7 +717,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
717 .pc_func = nfsd3_proc_access, 717 .pc_func = nfsd3_proc_access,
718 .pc_decode = (kxdrproc_t) nfs3svc_decode_accessargs, 718 .pc_decode = (kxdrproc_t) nfs3svc_decode_accessargs,
719 .pc_encode = (kxdrproc_t) nfs3svc_encode_accessres, 719 .pc_encode = (kxdrproc_t) nfs3svc_encode_accessres,
720 .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, 720 .pc_release = nfs3svc_release_fhandle,
721 .pc_argsize = sizeof(struct nfsd3_accessargs), 721 .pc_argsize = sizeof(struct nfsd3_accessargs),
722 .pc_ressize = sizeof(struct nfsd3_accessres), 722 .pc_ressize = sizeof(struct nfsd3_accessres),
723 .pc_cachetype = RC_NOCACHE, 723 .pc_cachetype = RC_NOCACHE,
@@ -727,7 +727,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
727 .pc_func = nfsd3_proc_readlink, 727 .pc_func = nfsd3_proc_readlink,
728 .pc_decode = (kxdrproc_t) nfs3svc_decode_readlinkargs, 728 .pc_decode = (kxdrproc_t) nfs3svc_decode_readlinkargs,
729 .pc_encode = (kxdrproc_t) nfs3svc_encode_readlinkres, 729 .pc_encode = (kxdrproc_t) nfs3svc_encode_readlinkres,
730 .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, 730 .pc_release = nfs3svc_release_fhandle,
731 .pc_argsize = sizeof(struct nfsd3_readlinkargs), 731 .pc_argsize = sizeof(struct nfsd3_readlinkargs),
732 .pc_ressize = sizeof(struct nfsd3_readlinkres), 732 .pc_ressize = sizeof(struct nfsd3_readlinkres),
733 .pc_cachetype = RC_NOCACHE, 733 .pc_cachetype = RC_NOCACHE,
@@ -737,7 +737,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
737 .pc_func = nfsd3_proc_read, 737 .pc_func = nfsd3_proc_read,
738 .pc_decode = (kxdrproc_t) nfs3svc_decode_readargs, 738 .pc_decode = (kxdrproc_t) nfs3svc_decode_readargs,
739 .pc_encode = (kxdrproc_t) nfs3svc_encode_readres, 739 .pc_encode = (kxdrproc_t) nfs3svc_encode_readres,
740 .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, 740 .pc_release = nfs3svc_release_fhandle,
741 .pc_argsize = sizeof(struct nfsd3_readargs), 741 .pc_argsize = sizeof(struct nfsd3_readargs),
742 .pc_ressize = sizeof(struct nfsd3_readres), 742 .pc_ressize = sizeof(struct nfsd3_readres),
743 .pc_cachetype = RC_NOCACHE, 743 .pc_cachetype = RC_NOCACHE,
@@ -747,7 +747,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
747 .pc_func = nfsd3_proc_write, 747 .pc_func = nfsd3_proc_write,
748 .pc_decode = (kxdrproc_t) nfs3svc_decode_writeargs, 748 .pc_decode = (kxdrproc_t) nfs3svc_decode_writeargs,
749 .pc_encode = (kxdrproc_t) nfs3svc_encode_writeres, 749 .pc_encode = (kxdrproc_t) nfs3svc_encode_writeres,
750 .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, 750 .pc_release = nfs3svc_release_fhandle,
751 .pc_argsize = sizeof(struct nfsd3_writeargs), 751 .pc_argsize = sizeof(struct nfsd3_writeargs),
752 .pc_ressize = sizeof(struct nfsd3_writeres), 752 .pc_ressize = sizeof(struct nfsd3_writeres),
753 .pc_cachetype = RC_REPLBUFF, 753 .pc_cachetype = RC_REPLBUFF,
@@ -757,7 +757,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
757 .pc_func = nfsd3_proc_create, 757 .pc_func = nfsd3_proc_create,
758 .pc_decode = (kxdrproc_t) nfs3svc_decode_createargs, 758 .pc_decode = (kxdrproc_t) nfs3svc_decode_createargs,
759 .pc_encode = (kxdrproc_t) nfs3svc_encode_createres, 759 .pc_encode = (kxdrproc_t) nfs3svc_encode_createres,
760 .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2, 760 .pc_release = nfs3svc_release_fhandle2,
761 .pc_argsize = sizeof(struct nfsd3_createargs), 761 .pc_argsize = sizeof(struct nfsd3_createargs),
762 .pc_ressize = sizeof(struct nfsd3_createres), 762 .pc_ressize = sizeof(struct nfsd3_createres),
763 .pc_cachetype = RC_REPLBUFF, 763 .pc_cachetype = RC_REPLBUFF,
@@ -767,7 +767,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
767 .pc_func = nfsd3_proc_mkdir, 767 .pc_func = nfsd3_proc_mkdir,
768 .pc_decode = (kxdrproc_t) nfs3svc_decode_mkdirargs, 768 .pc_decode = (kxdrproc_t) nfs3svc_decode_mkdirargs,
769 .pc_encode = (kxdrproc_t) nfs3svc_encode_createres, 769 .pc_encode = (kxdrproc_t) nfs3svc_encode_createres,
770 .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2, 770 .pc_release = nfs3svc_release_fhandle2,
771 .pc_argsize = sizeof(struct nfsd3_mkdirargs), 771 .pc_argsize = sizeof(struct nfsd3_mkdirargs),
772 .pc_ressize = sizeof(struct nfsd3_createres), 772 .pc_ressize = sizeof(struct nfsd3_createres),
773 .pc_cachetype = RC_REPLBUFF, 773 .pc_cachetype = RC_REPLBUFF,
@@ -777,7 +777,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
777 .pc_func = nfsd3_proc_symlink, 777 .pc_func = nfsd3_proc_symlink,
778 .pc_decode = (kxdrproc_t) nfs3svc_decode_symlinkargs, 778 .pc_decode = (kxdrproc_t) nfs3svc_decode_symlinkargs,
779 .pc_encode = (kxdrproc_t) nfs3svc_encode_createres, 779 .pc_encode = (kxdrproc_t) nfs3svc_encode_createres,
780 .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2, 780 .pc_release = nfs3svc_release_fhandle2,
781 .pc_argsize = sizeof(struct nfsd3_symlinkargs), 781 .pc_argsize = sizeof(struct nfsd3_symlinkargs),
782 .pc_ressize = sizeof(struct nfsd3_createres), 782 .pc_ressize = sizeof(struct nfsd3_createres),
783 .pc_cachetype = RC_REPLBUFF, 783 .pc_cachetype = RC_REPLBUFF,
@@ -787,7 +787,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
787 .pc_func = nfsd3_proc_mknod, 787 .pc_func = nfsd3_proc_mknod,
788 .pc_decode = (kxdrproc_t) nfs3svc_decode_mknodargs, 788 .pc_decode = (kxdrproc_t) nfs3svc_decode_mknodargs,
789 .pc_encode = (kxdrproc_t) nfs3svc_encode_createres, 789 .pc_encode = (kxdrproc_t) nfs3svc_encode_createres,
790 .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2, 790 .pc_release = nfs3svc_release_fhandle2,
791 .pc_argsize = sizeof(struct nfsd3_mknodargs), 791 .pc_argsize = sizeof(struct nfsd3_mknodargs),
792 .pc_ressize = sizeof(struct nfsd3_createres), 792 .pc_ressize = sizeof(struct nfsd3_createres),
793 .pc_cachetype = RC_REPLBUFF, 793 .pc_cachetype = RC_REPLBUFF,
@@ -797,7 +797,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
797 .pc_func = nfsd3_proc_remove, 797 .pc_func = nfsd3_proc_remove,
798 .pc_decode = (kxdrproc_t) nfs3svc_decode_diropargs, 798 .pc_decode = (kxdrproc_t) nfs3svc_decode_diropargs,
799 .pc_encode = (kxdrproc_t) nfs3svc_encode_wccstatres, 799 .pc_encode = (kxdrproc_t) nfs3svc_encode_wccstatres,
800 .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, 800 .pc_release = nfs3svc_release_fhandle,
801 .pc_argsize = sizeof(struct nfsd3_diropargs), 801 .pc_argsize = sizeof(struct nfsd3_diropargs),
802 .pc_ressize = sizeof(struct nfsd3_wccstatres), 802 .pc_ressize = sizeof(struct nfsd3_wccstatres),
803 .pc_cachetype = RC_REPLBUFF, 803 .pc_cachetype = RC_REPLBUFF,
@@ -807,7 +807,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
807 .pc_func = nfsd3_proc_rmdir, 807 .pc_func = nfsd3_proc_rmdir,
808 .pc_decode = (kxdrproc_t) nfs3svc_decode_diropargs, 808 .pc_decode = (kxdrproc_t) nfs3svc_decode_diropargs,
809 .pc_encode = (kxdrproc_t) nfs3svc_encode_wccstatres, 809 .pc_encode = (kxdrproc_t) nfs3svc_encode_wccstatres,
810 .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, 810 .pc_release = nfs3svc_release_fhandle,
811 .pc_argsize = sizeof(struct nfsd3_diropargs), 811 .pc_argsize = sizeof(struct nfsd3_diropargs),
812 .pc_ressize = sizeof(struct nfsd3_wccstatres), 812 .pc_ressize = sizeof(struct nfsd3_wccstatres),
813 .pc_cachetype = RC_REPLBUFF, 813 .pc_cachetype = RC_REPLBUFF,
@@ -817,7 +817,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
817 .pc_func = nfsd3_proc_rename, 817 .pc_func = nfsd3_proc_rename,
818 .pc_decode = (kxdrproc_t) nfs3svc_decode_renameargs, 818 .pc_decode = (kxdrproc_t) nfs3svc_decode_renameargs,
819 .pc_encode = (kxdrproc_t) nfs3svc_encode_renameres, 819 .pc_encode = (kxdrproc_t) nfs3svc_encode_renameres,
820 .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2, 820 .pc_release = nfs3svc_release_fhandle2,
821 .pc_argsize = sizeof(struct nfsd3_renameargs), 821 .pc_argsize = sizeof(struct nfsd3_renameargs),
822 .pc_ressize = sizeof(struct nfsd3_renameres), 822 .pc_ressize = sizeof(struct nfsd3_renameres),
823 .pc_cachetype = RC_REPLBUFF, 823 .pc_cachetype = RC_REPLBUFF,
@@ -827,7 +827,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
827 .pc_func = nfsd3_proc_link, 827 .pc_func = nfsd3_proc_link,
828 .pc_decode = (kxdrproc_t) nfs3svc_decode_linkargs, 828 .pc_decode = (kxdrproc_t) nfs3svc_decode_linkargs,
829 .pc_encode = (kxdrproc_t) nfs3svc_encode_linkres, 829 .pc_encode = (kxdrproc_t) nfs3svc_encode_linkres,
830 .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2, 830 .pc_release = nfs3svc_release_fhandle2,
831 .pc_argsize = sizeof(struct nfsd3_linkargs), 831 .pc_argsize = sizeof(struct nfsd3_linkargs),
832 .pc_ressize = sizeof(struct nfsd3_linkres), 832 .pc_ressize = sizeof(struct nfsd3_linkres),
833 .pc_cachetype = RC_REPLBUFF, 833 .pc_cachetype = RC_REPLBUFF,
@@ -837,7 +837,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
837 .pc_func = nfsd3_proc_readdir, 837 .pc_func = nfsd3_proc_readdir,
838 .pc_decode = (kxdrproc_t) nfs3svc_decode_readdirargs, 838 .pc_decode = (kxdrproc_t) nfs3svc_decode_readdirargs,
839 .pc_encode = (kxdrproc_t) nfs3svc_encode_readdirres, 839 .pc_encode = (kxdrproc_t) nfs3svc_encode_readdirres,
840 .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, 840 .pc_release = nfs3svc_release_fhandle,
841 .pc_argsize = sizeof(struct nfsd3_readdirargs), 841 .pc_argsize = sizeof(struct nfsd3_readdirargs),
842 .pc_ressize = sizeof(struct nfsd3_readdirres), 842 .pc_ressize = sizeof(struct nfsd3_readdirres),
843 .pc_cachetype = RC_NOCACHE, 843 .pc_cachetype = RC_NOCACHE,
@@ -846,7 +846,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
846 .pc_func = nfsd3_proc_readdirplus, 846 .pc_func = nfsd3_proc_readdirplus,
847 .pc_decode = (kxdrproc_t) nfs3svc_decode_readdirplusargs, 847 .pc_decode = (kxdrproc_t) nfs3svc_decode_readdirplusargs,
848 .pc_encode = (kxdrproc_t) nfs3svc_encode_readdirres, 848 .pc_encode = (kxdrproc_t) nfs3svc_encode_readdirres,
849 .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, 849 .pc_release = nfs3svc_release_fhandle,
850 .pc_argsize = sizeof(struct nfsd3_readdirplusargs), 850 .pc_argsize = sizeof(struct nfsd3_readdirplusargs),
851 .pc_ressize = sizeof(struct nfsd3_readdirres), 851 .pc_ressize = sizeof(struct nfsd3_readdirres),
852 .pc_cachetype = RC_NOCACHE, 852 .pc_cachetype = RC_NOCACHE,
@@ -882,7 +882,7 @@ static struct svc_procedure nfsd_procedures3[22] = {
882 .pc_func = nfsd3_proc_commit, 882 .pc_func = nfsd3_proc_commit,
883 .pc_decode = (kxdrproc_t) nfs3svc_decode_commitargs, 883 .pc_decode = (kxdrproc_t) nfs3svc_decode_commitargs,
884 .pc_encode = (kxdrproc_t) nfs3svc_encode_commitres, 884 .pc_encode = (kxdrproc_t) nfs3svc_encode_commitres,
885 .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, 885 .pc_release = nfs3svc_release_fhandle,
886 .pc_argsize = sizeof(struct nfsd3_commitargs), 886 .pc_argsize = sizeof(struct nfsd3_commitargs),
887 .pc_ressize = sizeof(struct nfsd3_commitres), 887 .pc_ressize = sizeof(struct nfsd3_commitres),
888 .pc_cachetype = RC_NOCACHE, 888 .pc_cachetype = RC_NOCACHE,
diff --git a/fs/nfsd/nfs3xdr.c b/fs/nfsd/nfs3xdr.c
index 12feac6ee2fd..7fd361a75287 100644
--- a/fs/nfsd/nfs3xdr.c
+++ b/fs/nfsd/nfs3xdr.c
@@ -1114,19 +1114,19 @@ nfs3svc_encode_commitres(struct svc_rqst *rqstp, __be32 *p,
1114/* 1114/*
1115 * XDR release functions 1115 * XDR release functions
1116 */ 1116 */
1117int 1117void
1118nfs3svc_release_fhandle(struct svc_rqst *rqstp, __be32 *p, 1118nfs3svc_release_fhandle(struct svc_rqst *rqstp)
1119 struct nfsd3_attrstat *resp)
1120{ 1119{
1120 struct nfsd3_attrstat *resp = rqstp->rq_resp;
1121
1121 fh_put(&resp->fh); 1122 fh_put(&resp->fh);
1122 return 1;
1123} 1123}
1124 1124
1125int 1125void
1126nfs3svc_release_fhandle2(struct svc_rqst *rqstp, __be32 *p, 1126nfs3svc_release_fhandle2(struct svc_rqst *rqstp)
1127 struct nfsd3_fhandle_pair *resp)
1128{ 1127{
1128 struct nfsd3_fhandle_pair *resp = rqstp->rq_resp;
1129
1129 fh_put(&resp->fh1); 1130 fh_put(&resp->fh1);
1130 fh_put(&resp->fh2); 1131 fh_put(&resp->fh2);
1131 return 1;
1132} 1132}
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index 26780d53a6f9..5aa847bdfc63 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -4543,9 +4543,8 @@ nfs4svc_encode_voidres(struct svc_rqst *rqstp, __be32 *p, void *dummy)
4543 return xdr_ressize_check(rqstp, p); 4543 return xdr_ressize_check(rqstp, p);
4544} 4544}
4545 4545
4546int nfsd4_release_compoundargs(void *rq, __be32 *p, void *resp) 4546void nfsd4_release_compoundargs(struct svc_rqst *rqstp)
4547{ 4547{
4548 struct svc_rqst *rqstp = rq;
4549 struct nfsd4_compoundargs *args = rqstp->rq_argp; 4548 struct nfsd4_compoundargs *args = rqstp->rq_argp;
4550 4549
4551 if (args->ops != args->iops) { 4550 if (args->ops != args->iops) {
@@ -4559,7 +4558,6 @@ int nfsd4_release_compoundargs(void *rq, __be32 *p, void *resp)
4559 args->to_free = tb->next; 4558 args->to_free = tb->next;
4560 kfree(tb); 4559 kfree(tb);
4561 } 4560 }
4562 return 1;
4563} 4561}
4564 4562
4565int 4563int
diff --git a/fs/nfsd/nfsproc.c b/fs/nfsd/nfsproc.c
index 448505b939db..dc32e0f8480d 100644
--- a/fs/nfsd/nfsproc.c
+++ b/fs/nfsd/nfsproc.c
@@ -587,7 +587,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
587 .pc_func = nfsd_proc_getattr, 587 .pc_func = nfsd_proc_getattr,
588 .pc_decode = (kxdrproc_t) nfssvc_decode_fhandle, 588 .pc_decode = (kxdrproc_t) nfssvc_decode_fhandle,
589 .pc_encode = (kxdrproc_t) nfssvc_encode_attrstat, 589 .pc_encode = (kxdrproc_t) nfssvc_encode_attrstat,
590 .pc_release = (kxdrproc_t) nfssvc_release_fhandle, 590 .pc_release = nfssvc_release_fhandle,
591 .pc_argsize = sizeof(struct nfsd_fhandle), 591 .pc_argsize = sizeof(struct nfsd_fhandle),
592 .pc_ressize = sizeof(struct nfsd_attrstat), 592 .pc_ressize = sizeof(struct nfsd_attrstat),
593 .pc_cachetype = RC_NOCACHE, 593 .pc_cachetype = RC_NOCACHE,
@@ -597,7 +597,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
597 .pc_func = nfsd_proc_setattr, 597 .pc_func = nfsd_proc_setattr,
598 .pc_decode = (kxdrproc_t) nfssvc_decode_sattrargs, 598 .pc_decode = (kxdrproc_t) nfssvc_decode_sattrargs,
599 .pc_encode = (kxdrproc_t) nfssvc_encode_attrstat, 599 .pc_encode = (kxdrproc_t) nfssvc_encode_attrstat,
600 .pc_release = (kxdrproc_t) nfssvc_release_fhandle, 600 .pc_release = nfssvc_release_fhandle,
601 .pc_argsize = sizeof(struct nfsd_sattrargs), 601 .pc_argsize = sizeof(struct nfsd_sattrargs),
602 .pc_ressize = sizeof(struct nfsd_attrstat), 602 .pc_ressize = sizeof(struct nfsd_attrstat),
603 .pc_cachetype = RC_REPLBUFF, 603 .pc_cachetype = RC_REPLBUFF,
@@ -615,7 +615,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
615 .pc_func = nfsd_proc_lookup, 615 .pc_func = nfsd_proc_lookup,
616 .pc_decode = (kxdrproc_t) nfssvc_decode_diropargs, 616 .pc_decode = (kxdrproc_t) nfssvc_decode_diropargs,
617 .pc_encode = (kxdrproc_t) nfssvc_encode_diropres, 617 .pc_encode = (kxdrproc_t) nfssvc_encode_diropres,
618 .pc_release = (kxdrproc_t) nfssvc_release_fhandle, 618 .pc_release = nfssvc_release_fhandle,
619 .pc_argsize = sizeof(struct nfsd_diropargs), 619 .pc_argsize = sizeof(struct nfsd_diropargs),
620 .pc_ressize = sizeof(struct nfsd_diropres), 620 .pc_ressize = sizeof(struct nfsd_diropres),
621 .pc_cachetype = RC_NOCACHE, 621 .pc_cachetype = RC_NOCACHE,
@@ -634,7 +634,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
634 .pc_func = nfsd_proc_read, 634 .pc_func = nfsd_proc_read,
635 .pc_decode = (kxdrproc_t) nfssvc_decode_readargs, 635 .pc_decode = (kxdrproc_t) nfssvc_decode_readargs,
636 .pc_encode = (kxdrproc_t) nfssvc_encode_readres, 636 .pc_encode = (kxdrproc_t) nfssvc_encode_readres,
637 .pc_release = (kxdrproc_t) nfssvc_release_fhandle, 637 .pc_release = nfssvc_release_fhandle,
638 .pc_argsize = sizeof(struct nfsd_readargs), 638 .pc_argsize = sizeof(struct nfsd_readargs),
639 .pc_ressize = sizeof(struct nfsd_readres), 639 .pc_ressize = sizeof(struct nfsd_readres),
640 .pc_cachetype = RC_NOCACHE, 640 .pc_cachetype = RC_NOCACHE,
@@ -652,7 +652,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
652 .pc_func = nfsd_proc_write, 652 .pc_func = nfsd_proc_write,
653 .pc_decode = (kxdrproc_t) nfssvc_decode_writeargs, 653 .pc_decode = (kxdrproc_t) nfssvc_decode_writeargs,
654 .pc_encode = (kxdrproc_t) nfssvc_encode_attrstat, 654 .pc_encode = (kxdrproc_t) nfssvc_encode_attrstat,
655 .pc_release = (kxdrproc_t) nfssvc_release_fhandle, 655 .pc_release = nfssvc_release_fhandle,
656 .pc_argsize = sizeof(struct nfsd_writeargs), 656 .pc_argsize = sizeof(struct nfsd_writeargs),
657 .pc_ressize = sizeof(struct nfsd_attrstat), 657 .pc_ressize = sizeof(struct nfsd_attrstat),
658 .pc_cachetype = RC_REPLBUFF, 658 .pc_cachetype = RC_REPLBUFF,
@@ -662,7 +662,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
662 .pc_func = nfsd_proc_create, 662 .pc_func = nfsd_proc_create,
663 .pc_decode = (kxdrproc_t) nfssvc_decode_createargs, 663 .pc_decode = (kxdrproc_t) nfssvc_decode_createargs,
664 .pc_encode = (kxdrproc_t) nfssvc_encode_diropres, 664 .pc_encode = (kxdrproc_t) nfssvc_encode_diropres,
665 .pc_release = (kxdrproc_t) nfssvc_release_fhandle, 665 .pc_release = nfssvc_release_fhandle,
666 .pc_argsize = sizeof(struct nfsd_createargs), 666 .pc_argsize = sizeof(struct nfsd_createargs),
667 .pc_ressize = sizeof(struct nfsd_diropres), 667 .pc_ressize = sizeof(struct nfsd_diropres),
668 .pc_cachetype = RC_REPLBUFF, 668 .pc_cachetype = RC_REPLBUFF,
@@ -708,7 +708,7 @@ static struct svc_procedure nfsd_procedures2[18] = {
708 .pc_func = nfsd_proc_mkdir, 708 .pc_func = nfsd_proc_mkdir,
709 .pc_decode = (kxdrproc_t) nfssvc_decode_createargs, 709 .pc_decode = (kxdrproc_t) nfssvc_decode_createargs,
710 .pc_encode = (kxdrproc_t) nfssvc_encode_diropres, 710 .pc_encode = (kxdrproc_t) nfssvc_encode_diropres,
711 .pc_release = (kxdrproc_t) nfssvc_release_fhandle, 711 .pc_release = nfssvc_release_fhandle,
712 .pc_argsize = sizeof(struct nfsd_createargs), 712 .pc_argsize = sizeof(struct nfsd_createargs),
713 .pc_ressize = sizeof(struct nfsd_diropres), 713 .pc_ressize = sizeof(struct nfsd_diropres),
714 .pc_cachetype = RC_REPLBUFF, 714 .pc_cachetype = RC_REPLBUFF,
diff --git a/fs/nfsd/nfsxdr.c b/fs/nfsd/nfsxdr.c
index 6a4947a3f4fa..de7b07ee489e 100644
--- a/fs/nfsd/nfsxdr.c
+++ b/fs/nfsd/nfsxdr.c
@@ -550,10 +550,10 @@ nfssvc_encode_entry(void *ccdv, const char *name,
550/* 550/*
551 * XDR release functions 551 * XDR release functions
552 */ 552 */
553int 553void
554nfssvc_release_fhandle(struct svc_rqst *rqstp, __be32 *p, 554nfssvc_release_fhandle(struct svc_rqst *rqstp)
555 struct nfsd_fhandle *resp)
556{ 555{
556 struct nfsd_fhandle *resp = rqstp->rq_resp;
557
557 fh_put(&resp->fh); 558 fh_put(&resp->fh);
558 return 1;
559} 559}
diff --git a/fs/nfsd/xdr.h b/fs/nfsd/xdr.h
index 4f0481d63804..2c21fa843fbf 100644
--- a/fs/nfsd/xdr.h
+++ b/fs/nfsd/xdr.h
@@ -164,7 +164,7 @@ int nfssvc_encode_readdirres(struct svc_rqst *, __be32 *, struct nfsd_readdirres
164int nfssvc_encode_entry(void *, const char *name, 164int nfssvc_encode_entry(void *, const char *name,
165 int namlen, loff_t offset, u64 ino, unsigned int); 165 int namlen, loff_t offset, u64 ino, unsigned int);
166 166
167int nfssvc_release_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *); 167void nfssvc_release_fhandle(struct svc_rqst *);
168 168
169/* Helper functions for NFSv2 ACL code */ 169/* Helper functions for NFSv2 ACL code */
170__be32 *nfs2svc_encode_fattr(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *fhp, struct kstat *stat); 170__be32 *nfs2svc_encode_fattr(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *fhp, struct kstat *stat);
diff --git a/fs/nfsd/xdr3.h b/fs/nfsd/xdr3.h
index 335e04aaf7db..23fe456a223b 100644
--- a/fs/nfsd/xdr3.h
+++ b/fs/nfsd/xdr3.h
@@ -330,10 +330,8 @@ int nfs3svc_encode_pathconfres(struct svc_rqst *, __be32 *,
330int nfs3svc_encode_commitres(struct svc_rqst *, __be32 *, 330int nfs3svc_encode_commitres(struct svc_rqst *, __be32 *,
331 struct nfsd3_commitres *); 331 struct nfsd3_commitres *);
332 332
333int nfs3svc_release_fhandle(struct svc_rqst *, __be32 *, 333void nfs3svc_release_fhandle(struct svc_rqst *);
334 struct nfsd3_attrstat *); 334void nfs3svc_release_fhandle2(struct svc_rqst *);
335int nfs3svc_release_fhandle2(struct svc_rqst *, __be32 *,
336 struct nfsd3_fhandle_pair *);
337int nfs3svc_encode_entry(void *, const char *name, 335int nfs3svc_encode_entry(void *, const char *name,
338 int namlen, loff_t offset, u64 ino, 336 int namlen, loff_t offset, u64 ino,
339 unsigned int); 337 unsigned int);
diff --git a/fs/nfsd/xdr4.h b/fs/nfsd/xdr4.h
index 8fda4abdf3b1..a158579d55a2 100644
--- a/fs/nfsd/xdr4.h
+++ b/fs/nfsd/xdr4.h
@@ -743,7 +743,7 @@ extern __be32
743nfsd4_release_lockowner(struct svc_rqst *rqstp, 743nfsd4_release_lockowner(struct svc_rqst *rqstp,
744 struct nfsd4_compound_state *, 744 struct nfsd4_compound_state *,
745 struct nfsd4_release_lockowner *rlockowner); 745 struct nfsd4_release_lockowner *rlockowner);
746extern int nfsd4_release_compoundargs(void *rq, __be32 *p, void *resp); 746extern void nfsd4_release_compoundargs(struct svc_rqst *rqstp);
747extern __be32 nfsd4_delegreturn(struct svc_rqst *rqstp, 747extern __be32 nfsd4_delegreturn(struct svc_rqst *rqstp,
748 struct nfsd4_compound_state *, struct nfsd4_delegreturn *dr); 748 struct nfsd4_compound_state *, struct nfsd4_delegreturn *dr);
749extern __be32 nfsd4_renew(struct svc_rqst *rqstp, 749extern __be32 nfsd4_renew(struct svc_rqst *rqstp,
diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h
index 5c222af2db41..1381e1343640 100644
--- a/include/linux/sunrpc/svc.h
+++ b/include/linux/sunrpc/svc.h
@@ -423,7 +423,8 @@ struct svc_procedure {
423 __be32 (*pc_func)(struct svc_rqst *); 423 __be32 (*pc_func)(struct svc_rqst *);
424 kxdrproc_t pc_decode; /* XDR decode args */ 424 kxdrproc_t pc_decode; /* XDR decode args */
425 kxdrproc_t pc_encode; /* XDR encode result */ 425 kxdrproc_t pc_encode; /* XDR encode result */
426 kxdrproc_t pc_release; /* XDR free result */ 426 /* XDR free result: */
427 void (*pc_release)(struct svc_rqst *);
427 unsigned int pc_argsize; /* argument struct size */ 428 unsigned int pc_argsize; /* argument struct size */
428 unsigned int pc_ressize; /* result struct size */ 429 unsigned int pc_ressize; /* result struct size */
429 unsigned int pc_count; /* call count */ 430 unsigned int pc_count; /* call count */
diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c
index 95335455ad38..4611cb7adc04 100644
--- a/net/sunrpc/svc.c
+++ b/net/sunrpc/svc.c
@@ -1287,12 +1287,12 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv)
1287 if (*statp == rpc_drop_reply || 1287 if (*statp == rpc_drop_reply ||
1288 test_bit(RQ_DROPME, &rqstp->rq_flags)) { 1288 test_bit(RQ_DROPME, &rqstp->rq_flags)) {
1289 if (procp->pc_release) 1289 if (procp->pc_release)
1290 procp->pc_release(rqstp, NULL, rqstp->rq_resp); 1290 procp->pc_release(rqstp);
1291 goto dropit; 1291 goto dropit;
1292 } 1292 }
1293 if (*statp == rpc_autherr_badcred) { 1293 if (*statp == rpc_autherr_badcred) {
1294 if (procp->pc_release) 1294 if (procp->pc_release)
1295 procp->pc_release(rqstp, NULL, rqstp->rq_resp); 1295 procp->pc_release(rqstp);
1296 goto err_bad_auth; 1296 goto err_bad_auth;
1297 } 1297 }
1298 if (*statp == rpc_success && 1298 if (*statp == rpc_success &&
@@ -1307,7 +1307,7 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv)
1307 if (!versp->vs_dispatch(rqstp, statp)) { 1307 if (!versp->vs_dispatch(rqstp, statp)) {
1308 /* Release reply info */ 1308 /* Release reply info */
1309 if (procp->pc_release) 1309 if (procp->pc_release)
1310 procp->pc_release(rqstp, NULL, rqstp->rq_resp); 1310 procp->pc_release(rqstp);
1311 goto dropit; 1311 goto dropit;
1312 } 1312 }
1313 } 1313 }
@@ -1318,7 +1318,7 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv)
1318 1318
1319 /* Release reply info */ 1319 /* Release reply info */
1320 if (procp->pc_release) 1320 if (procp->pc_release)
1321 procp->pc_release(rqstp, NULL, rqstp->rq_resp); 1321 procp->pc_release(rqstp);
1322 1322
1323 if (procp->pc_encode == NULL) 1323 if (procp->pc_encode == NULL)
1324 goto dropit; 1324 goto dropit;