RFC: remove function pointer casts and constify function tables
Subsystems (3)
This series was inspired by two recent events: talking to a academic researcher about the harm of function pointer casts for static analysis at a conference, and reading up the whole Grsecurity drama, including finding that their patchset does a lot of work to remove these casts in sunrpc and nfs (and in fact those seem the biggest culprit in the kernel), and constifying the operation vectors like so many others in the kernel, although done in a rather hacky and/or mechnical way.
This series tries to solve both patches properly, and except for two hacks that simply remove the p_count and pc_count counters should be reasonably clean. I'd love to hear feedback especially for those two patches, and if maybe no one actually cares about those counters in the end, which would make my life easier by not having to find a replacement mechnism.
Note that the first part of the series is about the RPC forechannel, and the latter about the backchannel, but due to bidirection operation in NFSv4 there is no really clean split between the client and server parts.
PATCH 1/32 sunrpc: properly type argument to kxdreproc_t
Pass struct rpc_request as the first argument instead of an untyped blob, and mark the data object as const.
--- include/linux/sunrpc/xdr.h | 5 ++++- net/sunrpc/clnt.c | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-)
include/linux/sunrpc/xdr.h +4 -1
@@ -17,6 +17,8 @@#include <asm/unaligned.h> #include <linux/scatterlist.h> +struct rpc_rqst ; +/* * Buffer adjustment */
@@ -222,7 +224,8 @@ struct xdr_stream {/* * These are the xdr_stream style generic XDR encode and decode functions. */ -typedef void (*kxdreproc_t )(void *rqstp,struct xdr_stream *xdr,void *obj); +typedef void (*kxdreproc_t )(struct rpc_rqst *rqstp,struct xdr_stream *xdr, +const void *obj);typedef int (*kxdrdproc_t )(void *rqstp,struct xdr_stream *xdr,void *obj);extern void xdr_init_encode (struct xdr_stream *xdr,struct xdr_buf *buf,__be32 *p);
net/sunrpc/clnt.c +2 -1
@@ -2484,7 +2484,8 @@ rpc_verify_header(struct rpc_task *task) goto out_garbage; } -static void rpcproc_encode_null (void *rqstp,struct xdr_stream *xdr,void *obj) +static void rpcproc_encode_null (struct rpc_rqst *rqstp,struct xdr_stream *xdr, +const void *obj) { }
Signature · 1 line
2.11.0
PATCH 2/32 sunrpc: fix encoder callback prototypes
In reply to Christoph HellwigDeclare the p_encode callbacks with the proper prototype instead of casting to kxdreproc_t and losing all type safety.
--- net/sunrpc/rpcb_clnt.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-)
net/sunrpc/rpcb_clnt.c +13 -11
@@ -843,8 +843,9 @@ static void rpcb_getport_done(struct rpc_task *child, void *data)*/ static void rpcb_enc_mapping (struct rpc_rqst *req,struct xdr_stream *xdr, -const struct rpcbind_args *rpcb) +const void *data) { +const struct rpcbind_args *rpcb = data;__be32 *p; dprintk("RPC: %5u encoding PMAP_%s call (%u, %u, %d, %u)\n",
@@ -917,8 +918,9 @@ static void encode_rpcb_string(struct xdr_stream *xdr, const char *string, }static void rpcb_enc_getaddr (struct rpc_rqst *req,struct xdr_stream *xdr, -const struct rpcbind_args *rpcb) +const void *data) { +const struct rpcbind_args *rpcb = data;__be32 *p; dprintk("RPC: %5u encoding RPCB_%s call (%u, %u, '%s', '%s')\n",
@@ -992,7 +994,7 @@ static int rpcb_dec_getaddr(struct rpc_rqst *req, struct xdr_stream *xdr,static struct rpc_procinfo rpcb_procedures2[] = { [RPCBPROC_SET ] = { .p_proc =RPCBPROC_SET , - .p_encode = (kxdreproc_t )rpcb_enc_mapping, + .p_encode = rpcb_enc_mapping, .p_decode = (kxdrdproc_t )rpcb_dec_set, .p_arglen = RPCB_mappingargs_sz, .p_replen = RPCB_setres_sz,
@@ -1002,7 +1004,7 @@ static struct rpc_procinfo rpcb_procedures2[] = { }, [RPCBPROC_UNSET] = { .p_proc = RPCBPROC_UNSET, - .p_encode = (kxdreproc_t)rpcb_enc_mapping, + .p_encode = rpcb_enc_mapping, .p_decode = (kxdrdproc_t)rpcb_dec_set, .p_arglen = RPCB_mappingargs_sz, .p_replen = RPCB_setres_sz,
@@ -1012,7 +1014,7 @@ static struct rpc_procinfo rpcb_procedures2[] = { }, [RPCBPROC_GETPORT] = { .p_proc = RPCBPROC_GETPORT, - .p_encode = (kxdreproc_t)rpcb_enc_mapping, + .p_encode = rpcb_enc_mapping, .p_decode = (kxdrdproc_t)rpcb_dec_getport, .p_arglen = RPCB_mappingargs_sz, .p_replen = RPCB_getportres_sz,
@@ -1025,7 +1027,7 @@ static struct rpc_procinfo rpcb_procedures2[] = {static struct rpc_procinfo rpcb_procedures3[] = { [RPCBPROC_SET ] = { .p_proc =RPCBPROC_SET , - .p_encode = (kxdreproc_t )rpcb_enc_getaddr, + .p_encode = rpcb_enc_getaddr, .p_decode = (kxdrdproc_t )rpcb_dec_set, .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_setres_sz,
@@ -1035,7 +1037,7 @@ static struct rpc_procinfo rpcb_procedures3[] = { }, [RPCBPROC_UNSET] = { .p_proc = RPCBPROC_UNSET, - .p_encode = (kxdreproc_t)rpcb_enc_getaddr, + .p_encode = rpcb_enc_getaddr, .p_decode = (kxdrdproc_t)rpcb_dec_set, .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_setres_sz,
@@ -1045,7 +1047,7 @@ static struct rpc_procinfo rpcb_procedures3[] = { }, [RPCBPROC_GETADDR] = { .p_proc = RPCBPROC_GETADDR, - .p_encode = (kxdreproc_t)rpcb_enc_getaddr, + .p_encode = rpcb_enc_getaddr, .p_decode = (kxdrdproc_t)rpcb_dec_getaddr, .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_getaddrres_sz,
@@ -1058,7 +1060,7 @@ static struct rpc_procinfo rpcb_procedures3[] = {static struct rpc_procinfo rpcb_procedures4[] = { [RPCBPROC_SET ] = { .p_proc =RPCBPROC_SET , - .p_encode = (kxdreproc_t )rpcb_enc_getaddr, + .p_encode = rpcb_enc_getaddr, .p_decode = (kxdrdproc_t )rpcb_dec_set, .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_setres_sz,
@@ -1068,7 +1070,7 @@ static struct rpc_procinfo rpcb_procedures4[] = { }, [RPCBPROC_UNSET] = { .p_proc = RPCBPROC_UNSET, - .p_encode = (kxdreproc_t)rpcb_enc_getaddr, + .p_encode = rpcb_enc_getaddr, .p_decode = (kxdrdproc_t)rpcb_dec_set, .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_setres_sz,
@@ -1078,7 +1080,7 @@ static struct rpc_procinfo rpcb_procedures4[] = { }, [RPCBPROC_GETADDR] = { .p_proc = RPCBPROC_GETADDR, - .p_encode = (kxdreproc_t)rpcb_enc_getaddr, + .p_encode = rpcb_enc_getaddr, .p_decode = (kxdrdproc_t)rpcb_dec_getaddr, .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_getaddrres_sz,
Signature · 1 line
2.11.0
Re: [PATCH 02/32] sunrpc: fix encoder callback prototypes
Hi Christoph,
----- Original Message -----
Quoted 20 lines
From: "Christoph Hellwig" <[email protected]>
To: "Trond Myklebust" <[email protected]>, "Anna Schumaker" <[email protected]>, "J. Bruce Fields" <[email protected]>, "Jeff Layton" <[email protected]>
Cc: "linux-nfs" <[email protected]>
Sent: Tuesday, May 9, 2017 11:19:40 AM
Subject: [PATCH 02/32] sunrpc: fix encoder callback prototypesDeclare the
p_encodecallbacks with the proper prototype instead of casting tokxdreproc_tand losing all type safety.Signed-off-by Christoph Hellwig <[email protected]>---
net/sunrpc/rpcb_clnt.c| 24 +++++++++++++-----------1 file changed, 13 insertions(+), 11 deletions(-)net/sunrpc/rpcb_clnt.c +0
-0
net/sunrpc/rpcb_clnt.c static void rpcb_getport_done(struct rpc_task *child, void · line 847
Quoted 6 lines
net/sunrpc/rpcb_clnt.c +1
-1@@ -843,8 +843,9 @@ static void rpcb_getport_done(struct rpc_task *child, void*data) */ static void rpcb_enc_mapping (struct rpc_rqst *req,struct xdr_stream *xdr, -const struct rpcbind_args *rpcb) +const void *data)
just out of curiosity: you are talking about increasing type safety, but at the same time replaces arguments to 'const void *data', which will accept everything. Is there something special which I don't understand?
Tigran.
Quoted 106 lines
net/sunrpc/rpcb_clnt.c +1
-0{ +const struct rpcbind_args *rpcb = data;__be32 *p;dprintk("RPC: %5u encoding PMAP_%s call (%u, %u, %d, %u)\n",net/sunrpc/rpcb_clnt.c +2
-1@@ -917,8 +918,9 @@ static void encode_rpcb_string(struct xdr_stream *xdr, const char *string, }static void rpcb_enc_getaddr (struct rpc_rqst *req,struct xdr_stream *xdr, -const struct rpcbind_args *rpcb) +const void *data) { +const struct rpcbind_args *rpcb = data;__be32 *p;dprintk("RPC: %5u encoding RPCB_%s call (%u, %u, '%s', '%s')\n",net/sunrpc/rpcb_clnt.c +1
-1@@ -992,7 +994,7 @@ static int rpcb_dec_getaddr(struct rpc_rqst *req, structxdr_stream *xdr, static struct rpc_procinfo rpcb_procedures2[] = { [RPCBPROC_SET ] = { .p_proc =RPCBPROC_SET , - .p_encode = (kxdreproc_t )rpcb_enc_mapping, + .p_encode = rpcb_enc_mapping, .p_decode = (kxdrdproc_t )rpcb_dec_set, .p_arglen = RPCB_mappingargs_sz,.p_replen = RPCB_setres_sz,net/sunrpc/rpcb_clnt.c +8
-9@@ -1002,7 +1004,7 @@ static struct rpc_procinfo rpcb_procedures2[] = { }, [RPCBPROC_UNSET] = { .p_proc = RPCBPROC_UNSET, - .p_encode = (kxdreproc_t)rpcb_enc_mapping, + .p_encode = rpcb_enc_mapping, .p_decode = (kxdrdproc_t)rpcb_dec_set, .p_arglen = RPCB_mappingargs_sz, .p_replen = RPCB_setres_sz,@@ -1012,7 +1014,7 @@ static struct rpc_procinfo rpcb_procedures2[] = { }, [RPCBPROC_GETPORT] = { .p_proc = RPCBPROC_GETPORT, - .p_encode = (kxdreproc_t)rpcb_enc_mapping, + .p_encode = rpcb_enc_mapping, .p_decode = (kxdrdproc_t)rpcb_dec_getport, .p_arglen = RPCB_mappingargs_sz, .p_replen = RPCB_getportres_sz,@@ -1025,7 +1027,7 @@ static struct rpc_procinfo rpcb_procedures2[] = {static struct rpc_procinfo rpcb_procedures3[] = { [RPCBPROC_SET ] = { .p_proc =RPCBPROC_SET , - .p_encode = (kxdreproc_t )rpcb_enc_getaddr, + .p_encode = rpcb_enc_getaddr, .p_decode = (kxdrdproc_t )rpcb_dec_set, .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_setres_sz,@@ -1035,7 +1037,7 @@ static struct rpc_procinfo rpcb_procedures3[] = { }, [RPCBPROC_UNSET] = { .p_proc = RPCBPROC_UNSET, - .p_encode = (kxdreproc_t)rpcb_enc_getaddr, + .p_encode = rpcb_enc_getaddr, .p_decode = (kxdrdproc_t)rpcb_dec_set, .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_setres_sz,@@ -1045,7 +1047,7 @@ static struct rpc_procinfo rpcb_procedures3[] = { }, [RPCBPROC_GETADDR] = { .p_proc = RPCBPROC_GETADDR, - .p_encode = (kxdreproc_t)rpcb_enc_getaddr, + .p_encode = rpcb_enc_getaddr, .p_decode = (kxdrdproc_t)rpcb_dec_getaddr, .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_getaddrres_sz,@@ -1058,7 +1060,7 @@ static struct rpc_procinfo rpcb_procedures3[] = {static struct rpc_procinfo rpcb_procedures4[] = { [RPCBPROC_SET ] = { .p_proc =RPCBPROC_SET , - .p_encode = (kxdreproc_t )rpcb_enc_getaddr, + .p_encode = rpcb_enc_getaddr, .p_decode = (kxdrdproc_t )rpcb_dec_set, .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_setres_sz,@@ -1068,7 +1070,7 @@ static struct rpc_procinfo rpcb_procedures4[] = { }, [RPCBPROC_UNSET] = { .p_proc = RPCBPROC_UNSET, - .p_encode = (kxdreproc_t)rpcb_enc_getaddr, + .p_encode = rpcb_enc_getaddr, .p_decode = (kxdrdproc_t)rpcb_dec_set, .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_setres_sz,@@ -1078,7 +1080,7 @@ static struct rpc_procinfo rpcb_procedures4[] = { }, [RPCBPROC_GETADDR] = { .p_proc = RPCBPROC_GETADDR, - .p_encode = (kxdreproc_t )rpcb_enc_getaddr, + .p_encode = rpcb_enc_getaddr, .p_decode = (kxdrdproc_t)rpcb_dec_getaddr, .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_getaddrres_sz, --2.11.0
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 02/32] sunrpc: fix encoder callback prototypes
Quoted 3 lines · Tigran
just out of curiosity: you are talking about increasing type safety, but at the same time replaces arguments to 'const void *data', which will accept everything. Is there something special which I don't understand?
Nothing special - cast are potentially dangerous in general, and function pointer cases are especially dangerous as there is no verify the caller and callee signatures match at all. As generic method call patterns need to have private data of some points they need to have a void pointer somewhere - either in the signature or as a pointer from a passed structure. For those the compiler at least can do some basic sanity checking, and good static analysis tools can even verify we get the proper object using whole program analysis.
Jeff Layton
Reviewed-byRe: [PATCH 02/32] sunrpc: fix encoder callback prototypes
Quoted 5 lines · Christoph Hellwig
Quoted 3 lines · Tigran
just out of curiosity: you are talking about increasing type safety, but at the same time replaces arguments to 'const void *data', which will accept everything. Is there something special which I don't understand?
Quoted 8 lines
Nothing special - cast are potentially dangerous in general, and function pointer cases are especially dangerous as there is no verify the caller and callee signatures match at all. As generic method call patterns need to have private data of some points they need to have a void pointer somewhere - either in the signature or as a pointer from a passed structure. For those the compiler at least can do some basic sanity checking, and good static analysis tools can even verify we get the proper object using whole program analysis.
Strong ACK on all of this.
I've been bitten before (in userland code) by having a function that took 3 arguments cast to something that took 2. So the callers ends up passing in too few arguments, and the function then just ends up using junk out of a register or off the the stack to satisfy the missing one. Not fun to track down.
Christoph, for the first 13 patches, you can add:
I'll look over the remaining ones later.
Re: [PATCH 02/32] sunrpc: fix encoder callback prototypes
Quoted 15 lines · Jeff Layton
Quoted 5 lines · Christoph Hellwig
Quoted 3 lines · Tigran
just out of curiosity: you are talking about increasing type safety, but at the same time replaces arguments to 'const void *data', which will accept everything. Is there something special which I don't understand?
Quoted 8 lines
Nothing special - cast are potentially dangerous in general, and function pointer cases are especially dangerous as there is no verify the caller and callee signatures match at all. As generic method call patterns need to have private data of some points they need to have a void pointer somewhere - either in the signature or as a pointer from a passed structure. For those the compiler at least can do some basic sanity checking, and good static analysis tools can even verify we get the proper object using whole program analysis.
Quoted 1 line
Strong ACK on all of this.
Also very much in favor of these patches.
Though I can't actually remembering seeing a bug here. So...
Quoted 5 lines
I've been bitten before (in userland code) by having a function that took 3 arguments cast to something that took 2. So the callers ends up passing in too few arguments, and the function then just ends up using junk out of a register or off the the stack to satisfy the missing one. Not fun to track down.
OK, that's good to know.
I'm more worried about the encoders and decoders themselves, but I don't know what to do about them.
--b.
Re: [PATCH 02/32] sunrpc: fix encoder callback prototypes
Quoted 16 lines · J. Bruce Fields
Quoted 15 lines · Jeff Layton
Quoted 13 lines · Christoph Hellwig
Quoted 3 lines · Tigran
just out of curiosity: you are talking about increasing type safety, but at the same time replaces arguments to 'const void *data', which will accept everything. Is there something special which I don't understand?
Nothing special - cast are potentially dangerous in general, and function pointer cases are especially dangerous as there is no verify the caller and callee signatures match at all. As generic method call patterns need to have private data of some points they need to have a void pointer somewhere - either in the signature or as a pointer from a passed structure. For those the compiler at least can do some basic sanity checking, and good static analysis tools can even verify we get the proper object using whole program analysis.
Quoted 3 lines
Quoted 1 line
Strong ACK on all of this.
Also very much in favor of these patches.
Passes my usual tests too, by the way.
--b.
Re: [PATCH 02/32] sunrpc: fix encoder callback prototypes
In reply to Christoph HellwigT24gVHVlLCAyMDE3LTA1LTA5IGF0IDExOjE5ICswMjAwLCBDaHJpc3RvcGggSGVsbHdpZyB3cm90 ZToNCj4gRGVjbGFyZSB0aGUgcF9lbmNvZGUgY2FsbGJhY2tzIHdpdGggdGhlIHByb3BlciBwcm90 b3R5cGUgaW5zdGVhZCBvZg0KPiBjYXN0aW5nIHRvIGt4ZHJlcHJvY190IGFuZCBsb3NpbmcgYWxs IHR5cGUgc2FmZXR5Lg0KPiANCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoIEhlbGx3aWcgPGhj aEBsc3QuZGU+DQo+IC0tLQ0KPiDCoG5ldC9zdW5ycGMvcnBjYl9jbG50LmMgfCAyNCArKysrKysr KysrKysrLS0tLS0tLS0tLS0NCj4gwqAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwg MTEgZGVsZXRpb25zKC0pDQo+IA0KDQpBY2tlZC1ieTogVHJvbmQgTXlrbGVidXN0IDx0cm9uZC5t eWtsZWJ1c3RAcHJpbWFyeWRhdGEuY29tPg0KLS0gDQpUcm9uZCBNeWtsZWJ1c3QNCkxpbnV4IE5G UyBjbGllbnQgbWFpbnRhaW5lciwgUHJpbWFyeURhdGENCnRyb25kLm15a2xlYnVzdEBwcmltYXJ5 ZGF0YS5jb20NCg==
PATCH 3/32 lockd: fix encoder callback prototypes
In reply to Christoph HellwigDeclare the p_encode callbacks with the proper prototype instead of casting to kxdreproc_t and losing all type safety.
--- fs/lockd/clnt4xdr.c | 22 +++++++++++++++------- fs/lockd/clntxdr.c | 22 +++++++++++++++------- fs/lockd/mon.c | 8 ++++---- 3 files changed, 34 insertions(+), 18 deletions(-)
fs/lockd/clnt4xdr.c +15 -7
@@ -381,8 +381,9 @@ static void encode_nlm4_lock(struct xdr_stream *xdr,*/ static void nlm4_xdr_enc_testargs (struct rpc_rqst *req,struct xdr_stream *xdr, -const struct nlm_args *args) +const void *data) { +const struct nlm_args *args = data;const struct nlm_lock *lock = &args->lock;encode_cookie (xdr, &args->cookie);
@@ -402,8 +403,9 @@ static void nlm4_xdr_enc_testargs(struct rpc_rqst *req,*/ static void nlm4_xdr_enc_lockargs (struct rpc_rqst *req,struct xdr_stream *xdr, -const struct nlm_args *args) +const void *data) { +const struct nlm_args *args = data;const struct nlm_lock *lock = &args->lock;encode_cookie (xdr, &args->cookie);
@@ -424,8 +426,9 @@ static void nlm4_xdr_enc_lockargs(struct rpc_rqst *req,*/ static void nlm4_xdr_enc_cancargs (struct rpc_rqst *req,struct xdr_stream *xdr, -const struct nlm_args *args) +const void *data) { +const struct nlm_args *args = data;const struct nlm_lock *lock = &args->lock;encode_cookie (xdr, &args->cookie);
@@ -442,8 +445,9 @@ static void nlm4_xdr_enc_cancargs(struct rpc_rqst *req,*/ static void nlm4_xdr_enc_unlockargs (struct rpc_rqst *req,struct xdr_stream *xdr, -const struct nlm_args *args) +const void *data) { +const struct nlm_args *args = data;const struct nlm_lock *lock = &args->lock;encode_cookie (xdr, &args->cookie);
@@ -458,8 +462,10 @@ static void nlm4_xdr_enc_unlockargs(struct rpc_rqst *req,*/ static void nlm4_xdr_enc_res (struct rpc_rqst *req,struct xdr_stream *xdr, -const struct nlm_res *result) +const void *data) { +const struct nlm_res *result = data; +encode_cookie (xdr, &result->cookie);encode_nlm4_stat (xdr, result->status); }
@@ -479,8 +485,10 @@ static void nlm4_xdr_enc_res(struct rpc_rqst *req,*/ static void nlm4_xdr_enc_testres (struct rpc_rqst *req,struct xdr_stream *xdr, -const struct nlm_res *result) +const void *data) { +const struct nlm_res *result = data; +encode_cookie (xdr, &result->cookie);encode_nlm4_stat (xdr, result->status);if (result->status == nlm_lck_denied)
@@ -566,7 +574,7 @@ static int nlm4_xdr_dec_res(struct rpc_rqst *req,#define PROC (proc, argtype, restype) \ [NLMPROC_##proc] = { \ .p_proc = NLMPROC_##proc, \ - .p_encode = (kxdreproc_t)nlm4_xdr_enc_##argtype, \ + .p_encode = nlm4_xdr_enc_##argtype, \ .p_decode = (kxdrdproc_t)nlm4_xdr_dec_##restype, \ .p_arglen = NLM4_##argtype##_sz, \ .p_replen = NLM4_##restype##_sz, \
fs/lockd/clntxdr.c +15 -7
@@ -374,8 +374,9 @@ static void encode_nlm_lock(struct xdr_stream *xdr,*/ static void nlm_xdr_enc_testargs (struct rpc_rqst *req,struct xdr_stream *xdr, -const struct nlm_args *args) +const void *data) { +const struct nlm_args *args = data;const struct nlm_lock *lock = &args->lock;encode_cookie (xdr, &args->cookie);
@@ -395,8 +396,9 @@ static void nlm_xdr_enc_testargs(struct rpc_rqst *req,*/ static void nlm_xdr_enc_lockargs (struct rpc_rqst *req,struct xdr_stream *xdr, -const struct nlm_args *args) +const void *data) { +const struct nlm_args *args = data;const struct nlm_lock *lock = &args->lock;encode_cookie (xdr, &args->cookie);
@@ -417,8 +419,9 @@ static void nlm_xdr_enc_lockargs(struct rpc_rqst *req,*/ static void nlm_xdr_enc_cancargs (struct rpc_rqst *req,struct xdr_stream *xdr, -const struct nlm_args *args) +const void *data) { +const struct nlm_args *args = data;const struct nlm_lock *lock = &args->lock;encode_cookie (xdr, &args->cookie);
@@ -435,8 +438,9 @@ static void nlm_xdr_enc_cancargs(struct rpc_rqst *req,*/ static void nlm_xdr_enc_unlockargs (struct rpc_rqst *req,struct xdr_stream *xdr, -const struct nlm_args *args) +const void *data) { +const struct nlm_args *args = data;const struct nlm_lock *lock = &args->lock;encode_cookie (xdr, &args->cookie);
@@ -451,8 +455,10 @@ static void nlm_xdr_enc_unlockargs(struct rpc_rqst *req,*/ static void nlm_xdr_enc_res (struct rpc_rqst *req,struct xdr_stream *xdr, -const struct nlm_res *result) +const void *data) { +const struct nlm_res *result = data; +encode_cookie (xdr, &result->cookie);encode_nlm_stat (xdr, result->status); }
@@ -479,8 +485,10 @@ static void encode_nlm_testrply(struct xdr_stream *xdr,static void nlm_xdr_enc_testres (struct rpc_rqst *req,struct xdr_stream *xdr, -const struct nlm_res *result) +const void *data) { +const struct nlm_res *result = data; +encode_cookie (xdr, &result->cookie);encode_nlm_stat (xdr, result->status);encode_nlm_testrply (xdr, result);
@@ -564,7 +572,7 @@ static int nlm_xdr_dec_res(struct rpc_rqst *req,#define PROC (proc, argtype, restype) \ [NLMPROC_##proc] = { \ .p_proc = NLMPROC_##proc, \ - .p_encode = (kxdreproc_t)nlm_xdr_enc_##argtype, \ + .p_encode = nlm_xdr_enc_##argtype, \ .p_decode = (kxdrdproc_t)nlm_xdr_dec_##restype, \ .p_arglen = NLM_##argtype##_sz, \ .p_replen = NLM_##restype##_sz, \
fs/lockd/mon.c +4 -4
@@ -476,14 +476,14 @@ static void encode_priv(struct xdr_stream *xdr, const struct nsm_args *argp) }static void nsm_xdr_enc_mon (struct rpc_rqst *req,struct xdr_stream *xdr, -const struct nsm_args *argp) +const void *argp) {encode_mon_id (xdr, argp);encode_priv (xdr, argp); }static void nsm_xdr_enc_unmon (struct rpc_rqst *req,struct xdr_stream *xdr, -const struct nsm_args *argp) +const void *argp) {encode_mon_id (xdr, argp); }
@@ -532,7 +532,7 @@ static int nsm_xdr_dec_stat(struct rpc_rqst *rqstp,static struct rpc_procinfo nsm_procedures[] = { [NSMPROC_MON ] = { .p_proc =NSMPROC_MON , - .p_encode = (kxdreproc_t )nsm_xdr_enc_mon, + .p_encode = nsm_xdr_enc_mon, .p_decode = (kxdrdproc_t )nsm_xdr_dec_stat_res, .p_arglen = SM_mon_sz, .p_replen = SM_monres_sz,
@@ -541,7 +541,7 @@ static struct rpc_procinfo nsm_procedures[] = { }, [NSMPROC_UNMON] = { .p_proc = NSMPROC_UNMON, - .p_encode = (kxdreproc_t)nsm_xdr_enc_unmon, + .p_encode = nsm_xdr_enc_unmon, .p_decode = (kxdrdproc_t)nsm_xdr_dec_stat, .p_arglen = SM_mon_id_sz, .p_replen = SM_unmonres_sz,
Signature · 1 line
2.11.0
Re: [PATCH 03/32] lockd: fix encoder callback prototypes
T24gVHVlLCAyMDE3LTA1LTA5IGF0IDExOjE5ICswMjAwLCBDaHJpc3RvcGggSGVsbHdpZyB3cm90 ZToNCj4gRGVjbGFyZSB0aGUgcF9lbmNvZGUgY2FsbGJhY2tzIHdpdGggdGhlIHByb3BlciBwcm90 b3R5cGUgaW5zdGVhZCBvZg0KPiBjYXN0aW5nIHRvIGt4ZHJlcHJvY190IGFuZCBsb3NpbmcgYWxs IHR5cGUgc2FmZXR5Lg0KPiANCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoIEhlbGx3aWcgPGhj aEBsc3QuZGU+DQo+IC0tLQ0KPiDCoGZzL2xvY2tkL2NsbnQ0eGRyLmMgfCAyMiArKysrKysrKysr KysrKystLS0tLS0tDQo+IMKgZnMvbG9ja2QvY2xudHhkci5jwqDCoHwgMjIgKysrKysrKysrKysr KysrLS0tLS0tLQ0KPiDCoGZzL2xvY2tkL21vbi5jwqDCoMKgwqDCoMKgfMKgwqA4ICsrKystLS0t DQo+IMKgMyBmaWxlcyBjaGFuZ2VkLCAzNCBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMoLSkN Cj4gDQo+IA0KQWNrZWQtYnk6IFRyb25kIE15a2xlYnVzdCA8dHJvbmQubXlrbGVidXN0QHByaW1h cnlkYXRhLmNvbT4NCi0tIA0KVHJvbmQgTXlrbGVidXN0DQpMaW51eCBORlMgY2xpZW50IG1haW50 YWluZXIsIFByaW1hcnlEYXRhDQp0cm9uZC5teWtsZWJ1c3RAcHJpbWFyeWRhdGEuY29tDQo=
PATCH 4/32 nfs: fix encoder callback prototypes
In reply to Christoph HellwigDeclare the p_encode callbacks with the proper prototype instead of casting to kxdreproc_t and losing all type safety.
--- fs/nfs/mount_clnt.c | 10 +-- fs/nfs/nfs2xdr.c | 49 ++++++++++---- fs/nfs/nfs3xdr.c | 83 ++++++++++++++++------- fs/nfs/nfs42xdr.c | 32 +++++---- fs/nfs/nfs4xdr.c | 188 +++++++++++++++++++++++++++++++++------------------- 5 files changed, 241 insertions(+), 121 deletions(-)
fs/nfs/mount_clnt.c +5 -5
@@ -304,7 +304,7 @@ static void encode_mntdirpath(struct xdr_stream *xdr, const char *pathname) }static void mnt_xdr_enc_dirpath (struct rpc_rqst *req,struct xdr_stream *xdr, -const char *dirpath) +const void *dirpath) {encode_mntdirpath (xdr, dirpath); }
@@ -467,7 +467,7 @@ static int mnt_xdr_dec_mountres3(struct rpc_rqst *req,static struct rpc_procinfo mnt_procedures[] = { [MOUNTPROC_MNT ] = { .p_proc =MOUNTPROC_MNT , - .p_encode = (kxdreproc_t )mnt_xdr_enc_dirpath, + .p_encode = mnt_xdr_enc_dirpath, .p_decode = (kxdrdproc_t )mnt_xdr_dec_mountres, .p_arglen = MNT_enc_dirpath_sz, .p_replen = MNT_dec_mountres_sz,
@@ -476,7 +476,7 @@ static struct rpc_procinfo mnt_procedures[] = { }, [MOUNTPROC_UMNT] = { .p_proc = MOUNTPROC_UMNT, - .p_encode = (kxdreproc_t)mnt_xdr_enc_dirpath, + .p_encode = mnt_xdr_enc_dirpath, .p_arglen = MNT_enc_dirpath_sz, .p_statidx = MOUNTPROC_UMNT, .p_name = "UMOUNT",
@@ -486,7 +486,7 @@ static struct rpc_procinfo mnt_procedures[] = {static struct rpc_procinfo mnt3_procedures[] = { [MOUNTPROC3_MNT ] = { .p_proc =MOUNTPROC3_MNT , - .p_encode = (kxdreproc_t )mnt_xdr_enc_dirpath, + .p_encode = mnt_xdr_enc_dirpath, .p_decode = (kxdrdproc_t )mnt_xdr_dec_mountres3, .p_arglen = MNT_enc_dirpath_sz, .p_replen = MNT_dec_mountres3_sz,
@@ -495,7 +495,7 @@ static struct rpc_procinfo mnt3_procedures[] = { }, [MOUNTPROC3_UMNT] = { .p_proc = MOUNTPROC3_UMNT, - .p_encode = (kxdreproc_t)mnt_xdr_enc_dirpath, + .p_encode = mnt_xdr_enc_dirpath, .p_arglen = MNT_enc_dirpath_sz, .p_statidx = MOUNTPROC3_UMNT, .p_name = "UMOUNT",
fs/nfs/nfs2xdr.c +36 -13
138 lines not on this page · raw message
fs/nfs/nfs3xdr.c +60 -23
241 lines not on this page · raw message
fs/nfs/nfs42xdr.c +19 -13
@@ -110,7 +110,7 @@ decode_getattr_maxsz) static void encode_fallocate(struct xdr_stream *xdr, -struct nfs42_falloc_args *args) +const struct nfs42_falloc_args *args) {encode_nfs4_stateid (xdr, &args->falloc_stateid);encode_uint64 (xdr, args->falloc_offset);
@@ -118,7 +118,7 @@ static void encode_fallocate(struct xdr_stream *xdr, }static void encode_allocate (struct xdr_stream *xdr, -struct nfs42_falloc_args *args, +const struct nfs42_falloc_args *args,struct compound_hdr *hdr) {encode_op_hdr (xdr,OP_ALLOCATE , decode_allocate_maxsz, hdr);
@@ -126,7 +126,7 @@ static void encode_allocate(struct xdr_stream *xdr, }static void encode_copy (struct xdr_stream *xdr, -struct nfs42_copy_args *args, +const struct nfs42_copy_args *args,struct compound_hdr *hdr) {encode_op_hdr (xdr,OP_COPY , decode_copy_maxsz, hdr);
@@ -143,7 +143,7 @@ static void encode_copy(struct xdr_stream *xdr, }static void encode_deallocate (struct xdr_stream *xdr, -struct nfs42_falloc_args *args, +const struct nfs42_falloc_args *args,struct compound_hdr *hdr) {encode_op_hdr (xdr,OP_DEALLOCATE , decode_deallocate_maxsz, hdr);
@@ -151,7 +151,7 @@ static void encode_deallocate(struct xdr_stream *xdr, }static void encode_seek (struct xdr_stream *xdr, -struct nfs42_seek_args *args, +const struct nfs42_seek_args *args,struct compound_hdr *hdr) {encode_op_hdr (xdr,OP_SEEK , decode_seek_maxsz, hdr);
@@ -161,7 +161,7 @@ static void encode_seek(struct xdr_stream *xdr, }static void encode_layoutstats (struct xdr_stream *xdr, -struct nfs42_layoutstat_args *args, +const struct nfs42_layoutstat_args *args,struct nfs42_layoutstat_devinfo *devinfo,struct compound_hdr *hdr) {
@@ -189,7 +189,7 @@ static void encode_layoutstats(struct xdr_stream *xdr, }static void encode_clone (struct xdr_stream *xdr, -struct nfs42_clone_args *args, +const struct nfs42_clone_args *args,struct compound_hdr *hdr) {__be32 *p;
@@ -208,8 +208,9 @@ static void encode_clone(struct xdr_stream *xdr,*/ static void nfs4_xdr_enc_allocate (struct rpc_rqst *req,struct xdr_stream *xdr, -struct nfs42_falloc_args *args) +const void *data) { +const struct nfs42_falloc_args *args = data;struct compound_hdr hdr = { .minorversion =nfs4_xdr_minorversion (&args->seq_args), };
@@ -227,8 +228,9 @@ static void nfs4_xdr_enc_allocate(struct rpc_rqst *req,*/ static void nfs4_xdr_enc_copy (struct rpc_rqst *req,struct xdr_stream *xdr, -struct nfs42_copy_args *args) +const void *data) { +const struct nfs42_copy_args *args = data;struct compound_hdr hdr = { .minorversion =nfs4_xdr_minorversion (&args->seq_args), };
@@ -247,8 +249,9 @@ static void nfs4_xdr_enc_copy(struct rpc_rqst *req,*/ static void nfs4_xdr_enc_deallocate (struct rpc_rqst *req,struct xdr_stream *xdr, -struct nfs42_falloc_args *args) +const void *data) { +const struct nfs42_falloc_args *args = data;struct compound_hdr hdr = { .minorversion =nfs4_xdr_minorversion (&args->seq_args), };
@@ -266,8 +269,9 @@ static void nfs4_xdr_enc_deallocate(struct rpc_rqst *req,*/ static void nfs4_xdr_enc_seek (struct rpc_rqst *req,struct xdr_stream *xdr, -struct nfs42_seek_args *args) +const void *data) { +const struct nfs42_seek_args *args = data;struct compound_hdr hdr = { .minorversion =nfs4_xdr_minorversion (&args->seq_args), };
@@ -284,8 +288,9 @@ static void nfs4_xdr_enc_seek(struct rpc_rqst *req,*/ static void nfs4_xdr_enc_layoutstats (struct rpc_rqst *req,struct xdr_stream *xdr, -struct nfs42_layoutstat_args *args) +const void *data) { +const struct nfs42_layoutstat_args *args = data;int i;struct compound_hdr hdr = {
@@ -306,8 +311,9 @@ static void nfs4_xdr_enc_layoutstats(struct rpc_rqst *req,*/ static void nfs4_xdr_enc_clone (struct rpc_rqst *req,struct xdr_stream *xdr, -struct nfs42_clone_args *args) +const void *data) { +const struct nfs42_clone_args *args = data;struct compound_hdr hdr = { .minorversion =nfs4_xdr_minorversion (&args->seq_args), };
fs/nfs/nfs4xdr.c +121 -67
631 lines not on this page · raw message
Signature · 1 line
2.11.0
Re: [PATCH 04/32] nfs: fix encoder callback prototypes
T24gVHVlLCAyMDE3LTA1LTA5IGF0IDExOjE5ICswMjAwLCBDaHJpc3RvcGggSGVsbHdpZyB3cm90 ZToNCj4gRGVjbGFyZSB0aGUgcF9lbmNvZGUgY2FsbGJhY2tzIHdpdGggdGhlIHByb3BlciBwcm90 b3R5cGUgaW5zdGVhZCBvZg0KPiBjYXN0aW5nIHRvIGt4ZHJlcHJvY190IGFuZCBsb3NpbmcgYWxs IHR5cGUgc2FmZXR5Lg0KPiANCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoIEhlbGx3aWcgPGhj aEBsc3QuZGU+DQo+IC0tLQ0KPiDCoGZzL25mcy9tb3VudF9jbG50LmMgfMKgwqAxMCArLS0NCj4g wqBmcy9uZnMvbmZzMnhkci5jwqDCoMKgwqB8wqDCoDQ5ICsrKysrKysrKystLS0tDQo+IMKgZnMv bmZzL25mczN4ZHIuY8KgwqDCoMKgfMKgwqA4MyArKysrKysrKysrKysrKysrLS0tLS0tLQ0KPiDC oGZzL25mcy9uZnM0Mnhkci5jwqDCoMKgfMKgwqAzMiArKysrKy0tLS0NCj4gwqBmcy9uZnMvbmZz NHhkci5jwqDCoMKgwqB8IDE4OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0t LS0tLS0NCj4gLS0tLS0tLS0tLQ0KPiDCoDUgZmlsZXMgY2hhbmdlZCwgMjQxIGluc2VydGlvbnMo KyksIDEyMSBkZWxldGlvbnMoLSkNCj4gDQo+IA0KQWNrZWQtYnk6IFRyb25kIE15a2xlYnVzdCA8 dHJvbmQubXlrbGVidXN0QHByaW1hcnlkYXRhLmNvbT4NCi0tIA0KVHJvbmQgTXlrbGVidXN0DQpM aW51eCBORlMgY2xpZW50IG1haW50YWluZXIsIFByaW1hcnlEYXRhDQp0cm9uZC5teWtsZWJ1c3RA cHJpbWFyeWRhdGEuY29tDQo=
PATCH 5/32 nfsd: fix encoder callback prototypes
In reply to Christoph HellwigDeclare the p_encode callbacks with the proper prototype instead of casting to kxdreproc_t and losing all type safety.
--- fs/nfsd/nfs4callback.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-)
fs/nfsd/nfs4callback.c +8 -5
@@ -468,7 +468,7 @@ static int decode_cb_sequence4res(struct xdr_stream *xdr,* NB: Without this zero space reservation, callbacks over krb5p fail */ static void nfs4_xdr_enc_cb_null (struct rpc_rqst *req,struct xdr_stream *xdr, -void *__unused) +const void *__unused) {xdr_reserve_space (xdr,0 ); }
@@ -477,8 +477,9 @@ static void nfs4_xdr_enc_cb_null(struct rpc_rqst *req, struct xdr_stream *xdr,* 20.2. Operation 4: CB_RECALL - Recall a Delegation */ static void nfs4_xdr_enc_cb_recall (struct rpc_rqst *req,struct xdr_stream *xdr, -const struct nfsd4_callback *cb) +const void *data) { +const struct nfsd4_callback *cb = data;const struct nfs4_delegation *dp =cb_to_delegation (cb);struct nfs4_cb_compound_hdr hdr = { .ident = cb->cb_clp->cl_cb_ident,
@@ -585,8 +586,9 @@ static void encode_cb_layout4args(struct xdr_stream *xdr,static void nfs4_xdr_enc_cb_layout (struct rpc_rqst *req,struct xdr_stream *xdr, -const struct nfsd4_callback *cb) +const void *data) { +const struct nfsd4_callback *cb = data;const struct nfs4_layout_stateid *ls = container_of(cb, struct nfs4_layout_stateid, ls_recall);struct nfs4_cb_compound_hdr hdr = {
@@ -631,8 +633,9 @@ static void encode_stateowner(struct xdr_stream *xdr, struct nfs4_stateowner *sostatic void nfs4_xdr_enc_cb_notify_lock (struct rpc_rqst *req,struct xdr_stream *xdr, -const struct nfsd4_callback *cb) +const void *data) { +const struct nfsd4_callback *cb = data;const struct nfsd4_blocked_lock *nbl = container_of(cb, struct nfsd4_blocked_lock, nbl_cb);struct nfs4_lockowner *lo = (struct nfs4_lockowner *)nbl->nbl_lock.fl_owner;
@@ -682,7 +685,7 @@ static int nfs4_xdr_dec_cb_notify_lock(struct rpc_rqst *rqstp,#define PROC (proc, call, argtype, restype) \ [NFSPROC4_CLNT_##proc] = { \ .p_proc = NFSPROC4_CB_##call, \ - .p_encode = (kxdreproc_t)nfs4_xdr_enc_##argtype, \ + .p_encode = nfs4_xdr_enc_##argtype, \ .p_decode = (kxdrdproc_t)nfs4_xdr_dec_##restype, \ .p_arglen = NFS4_enc_##argtype##_sz, \ .p_replen = NFS4_dec_##restype##_sz, \
Signature · 1 line
2.11.0
PATCH 6/32 sunrpc/auth_gss: nfsd: fix encoder callback prototypes
In reply to Christoph HellwigDeclare the p_encode callbacks with the proper prototype instead of casting to kxdreproc_t and losing all type safety.
--- net/sunrpc/auth_gss/gss_rpc_upcall.c | 2 +- net/sunrpc/auth_gss/gss_rpc_xdr.c | 11 ++++++----- net/sunrpc/auth_gss/gss_rpc_xdr.h | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-)
net/sunrpc/auth_gss/gss_rpc_upcall.c +1 -1
@@ -55,7 +55,7 @@ enum {#define PROC (proc, name) \ [GSSX_##proc] = { \ .p_proc = GSSX_##proc, \ - .p_encode = (kxdreproc_t)gssx_enc_##name, \ + .p_encode = gssx_enc_##name, \ .p_decode = (kxdrdproc_t)gssx_dec_##name, \ .p_arglen = GSSX_ARG_##name##_sz, \ .p_replen = GSSX_RES_##name##_sz, \
net/sunrpc/auth_gss/gss_rpc_xdr.c +6 -5
@@ -44,7 +44,7 @@ static int gssx_dec_bool(struct xdr_stream *xdr, u32 *v) }static int gssx_enc_buffer (struct xdr_stream *xdr, -gssx_buffer *buf) +const gssx_buffer *buf) {__be32 *p;
@@ -56,7 +56,7 @@ static int gssx_enc_buffer(struct xdr_stream *xdr, }static int gssx_enc_in_token (struct xdr_stream *xdr, -struct gssp_in_token *in) +const struct gssp_in_token *in) {__be32 *p;
@@ -130,7 +130,7 @@ static int gssx_dec_option(struct xdr_stream *xdr, }static int dummy_enc_opt_array (struct xdr_stream *xdr, -struct gssx_option_array *oa) +const struct gssx_option_array *oa) {__be32 *p;
@@ -348,7 +348,7 @@ static int gssx_dec_status(struct xdr_stream *xdr, }static int gssx_enc_call_ctx (struct xdr_stream *xdr, -struct gssx_call_ctx *ctx) +const struct gssx_call_ctx *ctx) {struct gssx_option opt;__be32 *p;
@@ -733,8 +733,9 @@ static int gssx_enc_cb(struct xdr_stream *xdr, struct gssx_cb *cb)void gssx_enc_accept_sec_context (struct rpc_rqst *req,struct xdr_stream *xdr, -struct gssx_arg_accept_sec_context *arg) +const void *data) { +const struct gssx_arg_accept_sec_context *arg = data;int err; err =gssx_enc_call_ctx (xdr, &arg->call_ctx);
net/sunrpc/auth_gss/gss_rpc_xdr.h +1 -1
@@ -179,7 +179,7 @@ struct gssx_res_accept_sec_context {#define gssx_dec_init_sec_context NULLvoid gssx_enc_accept_sec_context (struct rpc_rqst *req,struct xdr_stream *xdr, -struct gssx_arg_accept_sec_context *args); +const void *data);int gssx_dec_accept_sec_context (struct rpc_rqst *rqstp,struct xdr_stream *xdr,struct gssx_res_accept_sec_context *res);
Signature · 1 line
2.11.0
Re: [PATCH 06/32] sunrpc/auth_gss: nfsd: fix encoder callback prototypes
T24gVHVlLCAyMDE3LTA1LTA5IGF0IDExOjE5ICswMjAwLCBDaHJpc3RvcGggSGVsbHdpZyB3cm90 ZToNCj4gRGVjbGFyZSB0aGUgcF9lbmNvZGUgY2FsbGJhY2tzIHdpdGggdGhlIHByb3BlciBwcm90 b3R5cGUgaW5zdGVhZCBvZg0KPiBjYXN0aW5nIHRvIGt4ZHJlcHJvY190IGFuZCBsb3NpbmcgYWxs IHR5cGUgc2FmZXR5Lg0KPiANCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoIEhlbGx3aWcgPGhj aEBsc3QuZGU+DQo+IC0tLQ0KPiDCoG5ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX3JwY191cGNhbGwu YyB8wqDCoDIgKy0NCj4gwqBuZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19ycGNfeGRyLmPCoMKgwqDC oHwgMTEgKysrKysrLS0tLS0NCj4gwqBuZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19ycGNfeGRyLmjC oMKgwqDCoHzCoMKgMiArLQ0KPiDCoDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA3 IGRlbGV0aW9ucygtKQ0KPiANCj4gDQoNCkFja2VkLWJ5OiBUcm9uZCBNeWtsZWJ1c3QgPHRyb25k Lm15a2xlYnVzdEBwcmltYXJ5ZGF0YS5jb20+DQotLSANClRyb25kIE15a2xlYnVzdA0KTGludXgg TkZTIGNsaWVudCBtYWludGFpbmVyLCBQcmltYXJ5RGF0YQ0KdHJvbmQubXlrbGVidXN0QHByaW1h cnlkYXRhLmNvbQ0K
PATCH 7/32 sunrpc: properly type argument to kxdrdproc_t
In reply to Christoph HellwigPass struct rpc_request as the first argument instead of an untyped blob.
--- include/linux/sunrpc/xdr.h | 3 ++- net/sunrpc/clnt.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-)
include/linux/sunrpc/xdr.h +2 -1
@@ -226,7 +226,8 @@ struct xdr_stream {*/ typedef void (*kxdreproc_t )(struct rpc_rqst *rqstp,struct xdr_stream *xdr,const void *obj); -typedef int (*kxdrdproc_t )(void *rqstp,struct xdr_stream *xdr,void *obj); +typedef int (*kxdrdproc_t )(struct rpc_rqst *rqstp,struct xdr_stream *xdr, +void *obj);extern void xdr_init_encode (struct xdr_stream *xdr,struct xdr_buf *buf,__be32 *p);extern __be32 *xdr_reserve_space (struct xdr_stream *xdr,size_t nbytes);
net/sunrpc/clnt.c +2 -1
@@ -2489,7 +2489,8 @@ static void rpcproc_encode_null(struct rpc_rqst *rqstp, struct xdr_stream *xdr, { } -static int rpcproc_decode_null (void *rqstp,struct xdr_stream *xdr,void *obj) +static int rpcproc_decode_null (struct rpc_rqst *rqstp,struct xdr_stream *xdr, +void *obj) {return 0 ; }
Signature · 1 line
2.11.0
Re: [PATCH 07/32] sunrpc: properly type argument to kxdrdproc_t
T24gVHVlLCAyMDE3LTA1LTA5IGF0IDExOjE5ICswMjAwLCBDaHJpc3RvcGggSGVsbHdpZyB3cm90 ZToNCj4gUGFzcyBzdHJ1Y3QgcnBjX3JlcXVlc3QgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IGluc3Rl YWQgb2YgYW4gdW50eXBlZA0KPiBibG9iLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3Bo IEhlbGx3aWcgPGhjaEBsc3QuZGU+DQo+IC0tLQ0KPiDCoGluY2x1ZGUvbGludXgvc3VucnBjL3hk ci5oIHwgMyArKy0NCj4gwqBuZXQvc3VucnBjL2NsbnQuY8KgwqDCoMKgwqDCoMKgwqDCoMKgfCAz ICsrLQ0KPiDCoDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygt KQ0KPiANCj4gDQoNCg0KQWNrZWQtYnk6IFRyb25kIE15a2xlYnVzdCA8dHJvbmQubXlrbGVidXN0 QHByaW1hcnlkYXRhLmNvbT4NCi0tIA0KVHJvbmQgTXlrbGVidXN0DQpMaW51eCBORlMgY2xpZW50 IG1haW50YWluZXIsIFByaW1hcnlEYXRhDQp0cm9uZC5teWtsZWJ1c3RAcHJpbWFyeWRhdGEuY29t DQo=
PATCH 8/32 sunrpc: fix decoder callback prototypes
In reply to Christoph HellwigDeclare the p_decode callbacks with the proper prototype instead of casting to kxdrdproc_t and losing all type safety.
--- net/sunrpc/rpcb_clnt.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-)
net/sunrpc/rpcb_clnt.c +15 -12
@@ -861,8 +861,9 @@ static void rpcb_enc_mapping(struct rpc_rqst *req, struct xdr_stream *xdr, }static int rpcb_dec_getport (struct rpc_rqst *req,struct xdr_stream *xdr, -struct rpcbind_args *rpcb) +void *data) { +struct rpcbind_args *rpcb = data;unsigned long port;__be32 *p;
@@ -883,8 +884,9 @@ static int rpcb_dec_getport(struct rpc_rqst *req, struct xdr_stream *xdr, }static int rpcb_dec_set (struct rpc_rqst *req,struct xdr_stream *xdr, -unsigned int *boolp) +void *data) { +unsigned int *boolp = data;__be32 *p; p =xdr_inline_decode (xdr,4 );
@@ -939,8 +941,9 @@ static void rpcb_enc_getaddr(struct rpc_rqst *req, struct xdr_stream *xdr, }static int rpcb_dec_getaddr (struct rpc_rqst *req,struct xdr_stream *xdr, -struct rpcbind_args *rpcb) +void *data) { +struct rpcbind_args *rpcb = data;struct sockaddr_storage address;struct sockaddr *sap = (struct sockaddr *)&address;__be32 *p;
@@ -995,7 +998,7 @@ static struct rpc_procinfo rpcb_procedures2[] = { [RPCBPROC_SET] = { .p_proc = RPCBPROC_SET, .p_encode = rpcb_enc_mapping, - .p_decode = (kxdrdproc_t)rpcb_dec_set, + .p_decode = rpcb_dec_set, .p_arglen = RPCB_mappingargs_sz, .p_replen = RPCB_setres_sz, .p_statidx = RPCBPROC_SET,
@@ -1005,7 +1008,7 @@ static struct rpc_procinfo rpcb_procedures2[] = { [RPCBPROC_UNSET] = { .p_proc = RPCBPROC_UNSET, .p_encode = rpcb_enc_mapping, - .p_decode = (kxdrdproc_t)rpcb_dec_set, + .p_decode = rpcb_dec_set, .p_arglen = RPCB_mappingargs_sz, .p_replen = RPCB_setres_sz, .p_statidx = RPCBPROC_UNSET,
@@ -1015,7 +1018,7 @@ static struct rpc_procinfo rpcb_procedures2[] = { [RPCBPROC_GETPORT] = { .p_proc = RPCBPROC_GETPORT, .p_encode = rpcb_enc_mapping, - .p_decode = (kxdrdproc_t)rpcb_dec_getport, + .p_decode = rpcb_dec_getport, .p_arglen = RPCB_mappingargs_sz, .p_replen = RPCB_getportres_sz, .p_statidx = RPCBPROC_GETPORT,
@@ -1028,7 +1031,7 @@ static struct rpc_procinfo rpcb_procedures3[] = { [RPCBPROC_SET] = { .p_proc = RPCBPROC_SET, .p_encode = rpcb_enc_getaddr, - .p_decode = (kxdrdproc_t)rpcb_dec_set, + .p_decode = rpcb_dec_set, .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_setres_sz, .p_statidx = RPCBPROC_SET,
@@ -1038,7 +1041,7 @@ static struct rpc_procinfo rpcb_procedures3[] = { [RPCBPROC_UNSET] = { .p_proc = RPCBPROC_UNSET, .p_encode = rpcb_enc_getaddr, - .p_decode = (kxdrdproc_t)rpcb_dec_set, + .p_decode = rpcb_dec_set, .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_setres_sz, .p_statidx = RPCBPROC_UNSET,
@@ -1048,7 +1051,7 @@ static struct rpc_procinfo rpcb_procedures3[] = { [RPCBPROC_GETADDR] = { .p_proc = RPCBPROC_GETADDR, .p_encode = rpcb_enc_getaddr, - .p_decode = (kxdrdproc_t)rpcb_dec_getaddr, + .p_decode = rpcb_dec_getaddr, .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_getaddrres_sz, .p_statidx = RPCBPROC_GETADDR,
@@ -1061,7 +1064,7 @@ static struct rpc_procinfo rpcb_procedures4[] = { [RPCBPROC_SET] = { .p_proc = RPCBPROC_SET, .p_encode = rpcb_enc_getaddr, - .p_decode = (kxdrdproc_t)rpcb_dec_set, + .p_decode = rpcb_dec_set, .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_setres_sz, .p_statidx = RPCBPROC_SET,
@@ -1071,7 +1074,7 @@ static struct rpc_procinfo rpcb_procedures4[] = { [RPCBPROC_UNSET] = { .p_proc = RPCBPROC_UNSET, .p_encode = rpcb_enc_getaddr, - .p_decode = (kxdrdproc_t)rpcb_dec_set, + .p_decode = rpcb_dec_set, .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_setres_sz, .p_statidx = RPCBPROC_UNSET,
@@ -1081,7 +1084,7 @@ static struct rpc_procinfo rpcb_procedures4[] = { [RPCBPROC_GETADDR] = { .p_proc = RPCBPROC_GETADDR, .p_encode = rpcb_enc_getaddr, - .p_decode = (kxdrdproc_t)rpcb_dec_getaddr, + .p_decode = rpcb_dec_getaddr, .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_getaddrres_sz, .p_statidx = RPCBPROC_GETADDR,
Signature · 1 line
2.11.0
PATCH 9/32 sunrpc/auth_gss: fix decoder callback prototypes
In reply to Christoph HellwigDeclare the p_decode callbacks with the proper prototype instead of casting to kxdrdproc_t and losing all type safety.
--- net/sunrpc/auth_gss/gss_rpc_upcall.c | 2 +- net/sunrpc/auth_gss/gss_rpc_xdr.c | 3 ++- net/sunrpc/auth_gss/gss_rpc_xdr.h | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-)
net/sunrpc/auth_gss/gss_rpc_upcall.c +1 -1
@@ -56,7 +56,7 @@ enum { [GSSX_##proc] = { \ .p_proc = GSSX_##proc, \ .p_encode = gssx_enc_##name, \ - .p_decode = (kxdrdproc_t)gssx_dec_##name, \ + .p_decode = gssx_dec_##name, \ .p_arglen = GSSX_ARG_##name##_sz, \ .p_replen = GSSX_RES_##name##_sz, \ .p_statidx = GSSX_##proc, \
net/sunrpc/auth_gss/gss_rpc_xdr.c +2 -1
@@ -790,8 +790,9 @@ void gssx_enc_accept_sec_context(struct rpc_rqst *req,int gssx_dec_accept_sec_context (struct rpc_rqst *rqstp,struct xdr_stream *xdr, -struct gssx_res_accept_sec_context *res) +void *data) { +struct gssx_res_accept_sec_context *res = data;u32 value_follows;int err;struct page *scratch;
net/sunrpc/auth_gss/gss_rpc_xdr.h +1 -1
@@ -182,7 +182,7 @@ void gssx_enc_accept_sec_context(struct rpc_rqst *req, const void *data);int gssx_dec_accept_sec_context (struct rpc_rqst *rqstp,struct xdr_stream *xdr, -struct gssx_res_accept_sec_context *res); +void *data);#define gssx_enc_release_handle NULL#define gssx_dec_release_handle NULL#define gssx_enc_get_mic NULL
Signature · 1 line
2.11.0
Re: [PATCH 09/32] sunrpc/auth_gss: fix decoder callback prototypes
DQoNCkFja2VkLWJ5OiBUcm9uZCBNeWtsZWJ1c3QgPHRyb25kLm15a2xlYnVzdEBwcmltYXJ5ZGF0 YS5jb20+DQotLSANClRyb25kIE15a2xlYnVzdA0KTGludXggTkZTIGNsaWVudCBtYWludGFpbmVy LCBQcmltYXJ5RGF0YQ0KdHJvbmQubXlrbGVidXN0QHByaW1hcnlkYXRhLmNvbQ0K
PATCH 10/32 nfsd: fix decoder callback prototypes
In reply to Christoph HellwigDeclare the p_decode callbacks with the proper prototype instead of casting to kxdrdproc_t and losing all type safety.
--- fs/nfsd/nfs4callback.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)
fs/nfsd/nfs4callback.c +7 -4
@@ -513,8 +513,9 @@ static int nfs4_xdr_dec_cb_null(struct rpc_rqst *req, struct xdr_stream *xdr,*/ static int nfs4_xdr_dec_cb_recall (struct rpc_rqst *rqstp,struct xdr_stream *xdr, -struct nfsd4_callback *cb) +void *data) { +struct nfsd4_callback *cb = data;struct nfs4_cb_compound_hdr hdr;int status;
@@ -604,8 +605,9 @@ static void nfs4_xdr_enc_cb_layout(struct rpc_rqst *req,static int nfs4_xdr_dec_cb_layout (struct rpc_rqst *rqstp,struct xdr_stream *xdr, -struct nfsd4_callback *cb) +void *data) { +struct nfsd4_callback *cb = data;struct nfs4_cb_compound_hdr hdr;int status;
@@ -662,8 +664,9 @@ static void nfs4_xdr_enc_cb_notify_lock(struct rpc_rqst *req,static int nfs4_xdr_dec_cb_notify_lock (struct rpc_rqst *rqstp,struct xdr_stream *xdr, -struct nfsd4_callback *cb) +void *data) { +struct nfsd4_callback *cb = data;struct nfs4_cb_compound_hdr hdr;int status;
@@ -686,7 +689,7 @@ static int nfs4_xdr_dec_cb_notify_lock(struct rpc_rqst *rqstp, [NFSPROC4_CLNT_##proc] = { \ .p_proc = NFSPROC4_CB_##call, \ .p_encode = nfs4_xdr_enc_##argtype, \ - .p_decode = (kxdrdproc_t)nfs4_xdr_dec_##restype, \ + .p_decode = nfs4_xdr_dec_##restype, \ .p_arglen = NFS4_enc_##argtype##_sz, \ .p_replen = NFS4_dec_##restype##_sz, \ .p_statidx = NFSPROC4_CB_##call, \
Signature · 1 line
2.11.0
PATCH 11/32 lockd: fix decoder callback prototypes
In reply to Christoph HellwigDeclare the p_decode callbacks with the proper prototype instead of casting to kxdrdproc_t and losing all type safety.
--- fs/lockd/clnt4xdr.c | 8 +++++--- fs/lockd/clntxdr.c | 8 +++++--- fs/lockd/mon.c | 10 ++++++---- 3 files changed, 16 insertions(+), 10 deletions(-)
fs/lockd/clnt4xdr.c +5 -3
@@ -533,8 +533,9 @@ static int decode_nlm4_testrply(struct xdr_stream *xdr,static int nlm4_xdr_dec_testres (struct rpc_rqst *req,struct xdr_stream *xdr, -struct nlm_res *result) +void *data) { +struct nlm_res *result = data;int error; error =decode_cookie (xdr, &result->cookie);
@@ -553,8 +554,9 @@ static int nlm4_xdr_dec_testres(struct rpc_rqst *req,*/ static int nlm4_xdr_dec_res (struct rpc_rqst *req,struct xdr_stream *xdr, -struct nlm_res *result) +void *data) { +struct nlm_res *result = data;int error; error =decode_cookie (xdr, &result->cookie);
@@ -575,7 +577,7 @@ static int nlm4_xdr_dec_res(struct rpc_rqst *req, [NLMPROC_##proc] = { \ .p_proc = NLMPROC_##proc, \ .p_encode = nlm4_xdr_enc_##argtype, \ - .p_decode = (kxdrdproc_t)nlm4_xdr_dec_##restype, \ + .p_decode = nlm4_xdr_dec_##restype, \ .p_arglen = NLM4_##argtype##_sz, \ .p_replen = NLM4_##restype##_sz, \ .p_statidx = NLMPROC_##proc, \
fs/lockd/clntxdr.c +5 -3
@@ -531,8 +531,9 @@ static int decode_nlm_testrply(struct xdr_stream *xdr,static int nlm_xdr_dec_testres (struct rpc_rqst *req,struct xdr_stream *xdr, -struct nlm_res *result) +void *data) { +struct nlm_res *result = data;int error; error =decode_cookie (xdr, &result->cookie);
@@ -551,8 +552,9 @@ static int nlm_xdr_dec_testres(struct rpc_rqst *req,*/ static int nlm_xdr_dec_res (struct rpc_rqst *req,struct xdr_stream *xdr, -struct nlm_res *result) +void *data) { +struct nlm_res *result = data;int error; error =decode_cookie (xdr, &result->cookie);
@@ -573,7 +575,7 @@ static int nlm_xdr_dec_res(struct rpc_rqst *req, [NLMPROC_##proc] = { \ .p_proc = NLMPROC_##proc, \ .p_encode = nlm_xdr_enc_##argtype, \ - .p_decode = (kxdrdproc_t)nlm_xdr_dec_##restype, \ + .p_decode = nlm_xdr_dec_##restype, \ .p_arglen = NLM_##argtype##_sz, \ .p_replen = NLM_##restype##_sz, \ .p_statidx = NLMPROC_##proc, \
fs/lockd/mon.c +6 -4
@@ -490,8 +490,9 @@ static void nsm_xdr_enc_unmon(struct rpc_rqst *req, struct xdr_stream *xdr,static int nsm_xdr_dec_stat_res (struct rpc_rqst *rqstp,struct xdr_stream *xdr, -struct nsm_res *resp) +void *data) { +struct nsm_res *resp = data;__be32 *p; p =xdr_inline_decode (xdr,4 +4 );
@@ -507,8 +508,9 @@ static int nsm_xdr_dec_stat_res(struct rpc_rqst *rqstp,static int nsm_xdr_dec_stat (struct rpc_rqst *rqstp,struct xdr_stream *xdr, -struct nsm_res *resp) +void *data) { +struct nsm_res *resp = data;__be32 *p; p =xdr_inline_decode (xdr,4 );
@@ -533,7 +535,7 @@ static struct rpc_procinfo nsm_procedures[] = { [NSMPROC_MON] = { .p_proc = NSMPROC_MON, .p_encode = nsm_xdr_enc_mon, - .p_decode = (kxdrdproc_t)nsm_xdr_dec_stat_res, + .p_decode = nsm_xdr_dec_stat_res, .p_arglen = SM_mon_sz, .p_replen = SM_monres_sz, .p_statidx = NSMPROC_MON,
@@ -542,7 +544,7 @@ static struct rpc_procinfo nsm_procedures[] = { [NSMPROC_UNMON] = { .p_proc = NSMPROC_UNMON, .p_encode = nsm_xdr_enc_unmon, - .p_decode = (kxdrdproc_t)nsm_xdr_dec_stat, + .p_decode = nsm_xdr_dec_stat, .p_arglen = SM_mon_id_sz, .p_replen = SM_unmonres_sz, .p_statidx = NSMPROC_UNMON,
Signature · 1 line
2.11.0
Re: [PATCH 11/32] lockd: fix decoder callback prototypes
T24gVHVlLCAyMDE3LTA1LTA5IGF0IDExOjE5ICswMjAwLCBDaHJpc3RvcGggSGVsbHdpZyB3cm90 ZToNCj4gRGVjbGFyZSB0aGUgcF9kZWNvZGUgY2FsbGJhY2tzIHdpdGggdGhlIHByb3BlciBwcm90 b3R5cGUgaW5zdGVhZCBvZg0KPiBjYXN0aW5nIHRvIGt4ZHJkcHJvY190IGFuZCBsb3NpbmcgYWxs IHR5cGUgc2FmZXR5Lg0KPiANCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoIEhlbGx3aWcgPGhj aEBsc3QuZGU+DQo+IC0tLQ0KPiDCoGZzL2xvY2tkL2NsbnQ0eGRyLmMgfMKgwqA4ICsrKysrLS0t DQo+IMKgZnMvbG9ja2QvY2xudHhkci5jwqDCoHzCoMKgOCArKysrKy0tLQ0KPiDCoGZzL2xvY2tk L21vbi5jwqDCoMKgwqDCoMKgfCAxMCArKysrKystLS0tDQo+IMKgMyBmaWxlcyBjaGFuZ2VkLCAx NiBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkNCj4gDQpBY2tlZC1ieTogVHJvbmQgTXlr bGVidXN0IDx0cm9uZC5teWtsZWJ1c3RAcHJpbWFyeWRhdGEuY29tPg0KLS0gDQpUcm9uZCBNeWts ZWJ1c3QNCkxpbnV4IE5GUyBjbGllbnQgbWFpbnRhaW5lciwgUHJpbWFyeURhdGENCnRyb25kLm15 a2xlYnVzdEBwcmltYXJ5ZGF0YS5jb20NCg==
PATCH 12/32 nfs: fix decoder callback prototypes
In reply to Christoph HellwigDeclare the p_decode callbacks with the proper prototype instead of casting to kxdrdproc_t and losing all type safety.
--- fs/nfs/mount_clnt.c | 10 ++-- fs/nfs/nfs2xdr.c | 15 +++--- fs/nfs/nfs3xdr.c | 55 +++++++++++++-------- fs/nfs/nfs42xdr.c | 18 ++++--- fs/nfs/nfs4xdr.c | 137 ++++++++++++++++++++++++++++++++++------------------ 5 files changed, 151 insertions(+), 84 deletions(-)
fs/nfs/mount_clnt.c +6 -4
@@ -357,8 +357,9 @@ static int decode_fhandle(struct xdr_stream *xdr, struct mountres *res)static int mnt_xdr_dec_mountres (struct rpc_rqst *req,struct xdr_stream *xdr, -struct mountres *res) +void *data) { +struct mountres *res = data;int status; status =decode_status (xdr, res);
@@ -449,8 +450,9 @@ static int decode_auth_flavors(struct xdr_stream *xdr, struct mountres *res)static int mnt_xdr_dec_mountres3 (struct rpc_rqst *req,struct xdr_stream *xdr, -struct mountres *res) +void *data) { +struct mountres *res = data;int status; status =decode_fhs_status (xdr, res);
@@ -468,7 +470,7 @@ static struct rpc_procinfo mnt_procedures[] = { [MOUNTPROC_MNT] = { .p_proc = MOUNTPROC_MNT, .p_encode = mnt_xdr_enc_dirpath, - .p_decode = (kxdrdproc_t)mnt_xdr_dec_mountres, + .p_decode = mnt_xdr_dec_mountres, .p_arglen = MNT_enc_dirpath_sz, .p_replen = MNT_dec_mountres_sz, .p_statidx = MOUNTPROC_MNT,
@@ -487,7 +489,7 @@ static struct rpc_procinfo mnt3_procedures[] = { [MOUNTPROC3_MNT] = { .p_proc = MOUNTPROC3_MNT, .p_encode = mnt_xdr_enc_dirpath, - .p_decode = (kxdrdproc_t)mnt_xdr_dec_mountres3, + .p_decode = mnt_xdr_dec_mountres3, .p_arglen = MNT_enc_dirpath_sz, .p_replen = MNT_dec_mountres3_sz, .p_statidx = MOUNTPROC3_MNT,
fs/nfs/nfs2xdr.c +9 -6
@@ -832,13 +832,13 @@ static int nfs2_xdr_dec_stat(struct rpc_rqst *req, struct xdr_stream *xdr, }static int nfs2_xdr_dec_attrstat (struct rpc_rqst *req,struct xdr_stream *xdr, -struct nfs_fattr *result) +void *result) {return decode_attrstat (xdr, result,NULL ); }static int nfs2_xdr_dec_diropres (struct rpc_rqst *req,struct xdr_stream *xdr, -struct nfs_diropok *result) +void *result) {return decode_diropres (xdr, result); }
@@ -883,8 +883,9 @@ static int nfs2_xdr_dec_readlinkres(struct rpc_rqst *req,* }; */ static int nfs2_xdr_dec_readres (struct rpc_rqst *req,struct xdr_stream *xdr, -struct nfs_pgio_res *result) +void *data) { +struct nfs_pgio_res *result = data;enum nfs_stat status;int error;
@@ -905,8 +906,10 @@ static int nfs2_xdr_dec_readres(struct rpc_rqst *req, struct xdr_stream *xdr, }static int nfs2_xdr_dec_writeres (struct rpc_rqst *req,struct xdr_stream *xdr, -struct nfs_pgio_res *result) +void *data) { +struct nfs_pgio_res *result = data; +/* All NFSv2 writes are "file sync" writes */ result->verf->committed =NFS_FILE_SYNC ;return decode_attrstat (xdr, result->fattr, &result->op_status);
@@ -1057,7 +1060,7 @@ static int decode_info(struct xdr_stream *xdr, struct nfs2_fsstat *result) }static int nfs2_xdr_dec_statfsres (struct rpc_rqst *req,struct xdr_stream *xdr, -struct nfs2_fsstat *result) +void *result) {enum nfs_stat status;int error;
@@ -1142,7 +1145,7 @@ static int nfs_stat_to_errno(enum nfs_stat status) [NFSPROC_##proc] = { \ .p_proc = NFSPROC_##proc, \ .p_encode = nfs2_xdr_enc_##argtype, \ - .p_decode = (kxdrdproc_t)nfs2_xdr_dec_##restype, \ + .p_decode = nfs2_xdr_dec_##restype, \ .p_arglen = NFS_##argtype##_sz, \ .p_replen = NFS_##restype##_sz, \ .p_timer = timer, \
fs/nfs/nfs3xdr.c +34 -21
194 lines not on this page · raw message
fs/nfs/nfs42xdr.c +12 -6
@@ -439,8 +439,9 @@ static int decode_clone(struct xdr_stream *xdr)*/ static int nfs4_xdr_dec_allocate (struct rpc_rqst *rqstp,struct xdr_stream *xdr, -struct nfs42_falloc_res *res) +void *data) { +struct nfs42_falloc_res *res = data;struct compound_hdr hdr;int status;
@@ -466,8 +467,9 @@ static int nfs4_xdr_dec_allocate(struct rpc_rqst *rqstp,*/ static int nfs4_xdr_dec_copy (struct rpc_rqst *rqstp,struct xdr_stream *xdr, -struct nfs42_copy_res *res) +void *data) { +struct nfs42_copy_res *res = data;struct compound_hdr hdr;int status;
@@ -496,8 +498,9 @@ static int nfs4_xdr_dec_copy(struct rpc_rqst *rqstp,*/ static int nfs4_xdr_dec_deallocate (struct rpc_rqst *rqstp,struct xdr_stream *xdr, -struct nfs42_falloc_res *res) +void *data) { +struct nfs42_falloc_res *res = data;struct compound_hdr hdr;int status;
@@ -523,8 +526,9 @@ static int nfs4_xdr_dec_deallocate(struct rpc_rqst *rqstp,*/ static int nfs4_xdr_dec_seek (struct rpc_rqst *rqstp,struct xdr_stream *xdr, -struct nfs42_seek_res *res) +void *data) { +struct nfs42_seek_res *res = data;struct compound_hdr hdr;int status;
@@ -547,8 +551,9 @@ static int nfs4_xdr_dec_seek(struct rpc_rqst *rqstp,*/ static int nfs4_xdr_dec_layoutstats (struct rpc_rqst *rqstp,struct xdr_stream *xdr, -struct nfs42_layoutstat_res *res) +void *data) { +struct nfs42_layoutstat_res *res = data;struct compound_hdr hdr;int status, i;
@@ -577,8 +582,9 @@ static int nfs4_xdr_dec_layoutstats(struct rpc_rqst *rqstp,*/ static int nfs4_xdr_dec_clone (struct rpc_rqst *rqstp,struct xdr_stream *xdr, -struct nfs42_clone_res *res) +void *data) { +struct nfs42_clone_res *res = data;struct compound_hdr hdr;int status;
fs/nfs/nfs4xdr.c +90 -47
461 lines not on this page · raw message
Signature · 1 line
2.11.0
Re: [PATCH 12/32] nfs: fix decoder callback prototypes
T24gVHVlLCAyMDE3LTA1LTA5IGF0IDExOjE5ICswMjAwLCBDaHJpc3RvcGggSGVsbHdpZyB3cm90 ZToNCj4gRGVjbGFyZSB0aGUgcF9kZWNvZGUgY2FsbGJhY2tzIHdpdGggdGhlIHByb3BlciBwcm90 b3R5cGUgaW5zdGVhZCBvZg0KPiBjYXN0aW5nIHRvIGt4ZHJkcHJvY190IGFuZCBsb3NpbmcgYWxs IHR5cGUgc2FmZXR5Lg0KPiANCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoIEhlbGx3aWcgPGhj aEBsc3QuZGU+DQo+IC0tLQ0KPiDCoGZzL25mcy9tb3VudF9jbG50LmMgfMKgwqAxMCArKy0tDQo+ IMKgZnMvbmZzL25mczJ4ZHIuY8KgwqDCoMKgfMKgwqAxNSArKystLS0NCj4gwqBmcy9uZnMvbmZz M3hkci5jwqDCoMKgwqB8wqDCoDU1ICsrKysrKysrKysrKystLS0tLS0tLQ0KPiDCoGZzL25mcy9u ZnM0Mnhkci5jwqDCoMKgfMKgwqAxOCArKysrLS0tDQo+IMKgZnMvbmZzL25mczR4ZHIuY8KgwqDC oMKgfCAxMzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQ0KPiAtLS0t LS0tLS0tLS0NCj4gwqA1IGZpbGVzIGNoYW5nZWQsIDE1MSBpbnNlcnRpb25zKCspLCA4NCBkZWxl dGlvbnMoLSkNCj4gDQoNCkFja2VkLWJ5OiBUcm9uZCBNeWtsZWJ1c3QgPHRyb25kLm15a2xlYnVz dEBwcmltYXJ5ZGF0YS5jb20+DQotLSANClRyb25kIE15a2xlYnVzdA0KTGludXggTkZTIGNsaWVu dCBtYWludGFpbmVyLCBQcmltYXJ5RGF0YQ0KdHJvbmQubXlrbGVidXN0QHByaW1hcnlkYXRhLmNv bQ0K
PATCH 13/32 nfs: don't cast callback decode/proc/encode routines
In reply to Christoph HellwigInstead declare all functions with the proper methods signature.
--- fs/nfs/callback.h | 27 ++++++---------- fs/nfs/callback_proc.c | 33 ++++++++++++------- fs/nfs/callback_xdr.c | 86 +++++++++++++++++++++++++++----------------------- 3 files changed, 77 insertions(+), 69 deletions(-)
fs/nfs/callback.h +10 -17
@@ -114,8 +114,7 @@ struct cb_sequenceres {uint32_t csr_target_highestslotid; }; -extern __be32 nfs4_callback_sequence (struct cb_sequenceargs *args, -struct cb_sequenceres *res, +extern __be32 nfs4_callback_sequence (void *argp,void *resp,struct cb_process_state *cps);#define RCA4_TYPE_MASK_RDATA_DLG 0
@@ -134,15 +133,13 @@ struct cb_recallanyargs {uint32_t craa_type_mask; }; -extern __be32 nfs4_callback_recallany (struct cb_recallanyargs *args, -void *dummy, +extern __be32 nfs4_callback_recallany (void *argp,void *resp,struct cb_process_state *cps);struct cb_recallslotargs {uint32_t crsa_target_highest_slotid; }; -extern __be32 nfs4_callback_recallslot (struct cb_recallslotargs *args, -void *dummy, +extern __be32 nfs4_callback_recallslot (void *argp,void *resp,struct cb_process_state *cps);struct cb_layoutrecallargs {
@@ -159,9 +156,8 @@ struct cb_layoutrecallargs { }; }; -extern __be32 nfs4_callback_layoutrecall ( -struct cb_layoutrecallargs *args, -void *dummy,struct cb_process_state *cps); +extern __be32 nfs4_callback_layoutrecall (void *argp,void *resp, +struct cb_process_state *cps);struct cb_devicenotifyitem {uint32_t cbd_notify_type;
@@ -175,9 +171,8 @@ struct cb_devicenotifyargs {struct cb_devicenotifyitem *devs; }; -extern __be32 nfs4_callback_devicenotify ( -struct cb_devicenotifyargs *args, -void *dummy,struct cb_process_state *cps); +extern __be32 nfs4_callback_devicenotify (void *argp,void *resp, +struct cb_process_state *cps);struct cb_notify_lock_args {struct nfs_fh cbnl_fh;
@@ -185,15 +180,13 @@ struct cb_notify_lock_args { bool cbnl_valid; }; -extern __be32 nfs4_callback_notify_lock (struct cb_notify_lock_args *args, -void *dummy, +extern __be32 nfs4_callback_notify_lock (void *argp,void *resp,struct cb_process_state *cps);#endif /* CONFIG_NFS_V4_1 */ extern int check_gss_callback_principal (struct nfs_client *,struct svc_rqst *); -extern __be32 nfs4_callback_getattr (struct cb_getattrargs *args, -struct cb_getattrres *res, +extern __be32 nfs4_callback_getattr (void *argp,void *resp,struct cb_process_state *cps); -extern __be32 nfs4_callback_recall (struct cb_recallargs *args,void *dummy, +extern __be32 nfs4_callback_recall (void *argp,void *resp,struct cb_process_state *cps);#if IS_ENABLED (CONFIG_NFS_V4 )extern int nfs_callback_up (u32 minorversion,struct rpc_xprt *xprt);
fs/nfs/callback_proc.c +21 -12
@@ -19,10 +19,11 @@#define NFSDBG_FACILITY NFSDBG_CALLBACK -__be32 nfs4_callback_getattr (struct cb_getattrargs *args, -struct cb_getattrres *res, +__be32 nfs4_callback_getattr (void *argp,void *resp,struct cb_process_state *cps) { +struct cb_getattrargs *args = argp; +struct cb_getattrres *res = resp;struct nfs_delegation *delegation;struct nfs_inode *nfsi;struct inode *inode;
@@ -68,9 +69,10 @@ __be32 nfs4_callback_getattr(struct cb_getattrargs *args,return res->status; } -__be32 nfs4_callback_recall (struct cb_recallargs *args,void *dummy, +__be32 nfs4_callback_recall (void *argp,void *resp,struct cb_process_state *cps) { +struct cb_recallargs *args = argp;struct inode *inode;__be32 res;
@@ -329,9 +331,10 @@ static u32 do_callback_layoutrecall(struct nfs_client *clp, } -__be32 nfs4_callback_layoutrecall (struct cb_layoutrecallargs *args, -void *dummy,struct cb_process_state *cps) +__be32 nfs4_callback_layoutrecall (void *argp,void *resp, +struct cb_process_state *cps) { +struct cb_layoutrecallargs *args = argp;u32 res;dprintk ("%s: -->\n" , __func__);
@@ -356,9 +359,10 @@ static void pnfs_recall_all_layouts(struct nfs_client *clp)do_callback_layoutrecall (clp, &args); } -__be32 nfs4_callback_devicenotify (struct cb_devicenotifyargs *args, -void *dummy,struct cb_process_state *cps) +__be32 nfs4_callback_devicenotify (void *argp,void *resp, +struct cb_process_state *cps) { +struct cb_devicenotifyargs *args = argp;int i;__be32 res =0 ;struct nfs_client *clp = cps->clp;
@@ -500,10 +504,11 @@ static bool referring_call_exists(struct nfs_client *clp,return status; } -__be32 nfs4_callback_sequence (struct cb_sequenceargs *args, -struct cb_sequenceres *res, +__be32 nfs4_callback_sequence (void *argp,void *resp,struct cb_process_state *cps) { +struct cb_sequenceargs *args = argp; +struct cb_sequenceres *res = resp;struct nfs4_slot_table *tbl;struct nfs4_slot *slot;struct nfs_client *clp;
@@ -604,9 +609,10 @@ validate_bitmap_values(unsigned long mask)return (mask & ~RCA4_TYPE_MASK_ALL ) ==0 ; } -__be32 nfs4_callback_recallany (struct cb_recallanyargs *args,void *dummy, +__be32 nfs4_callback_recallany (void *argp,void *resp,struct cb_process_state *cps) { +struct cb_recallanyargs *args = argp;__be32 status;fmode_t flags =0 ;
@@ -639,9 +645,10 @@ __be32 nfs4_callback_recallany(struct cb_recallanyargs *args, void *dummy, }/* Reduce the fore channel's max_slots to the target value */ -__be32 nfs4_callback_recallslot (struct cb_recallslotargs *args,void *dummy, +__be32 nfs4_callback_recallslot (void *argp,void *resp,struct cb_process_state *cps) { +struct cb_recallslotargs *args = argp;struct nfs4_slot_table *fc_tbl;__be32 status;
@@ -664,9 +671,11 @@ __be32 nfs4_callback_recallslot(struct cb_recallslotargs *args, void *dummy,return status; } -__be32 nfs4_callback_notify_lock (struct cb_notify_lock_args *args,void *dummy, +__be32 nfs4_callback_notify_lock (void *argp,void *resp,struct cb_process_state *cps) { +struct cb_notify_lock_args *args = argp; +if (!cps->clp)/* set in cb_sequence */ return htonl (NFS4ERR_OP_NOT_IN_SESSION );
fs/nfs/callback_xdr.c +46 -40
191 lines not on this page · raw message
Signature · 1 line
2.11.0
Re: [PATCH 13/32] nfs: don't cast callback decode/proc/encode routines
T24gVHVlLCAyMDE3LTA1LTA5IGF0IDExOjE5ICswMjAwLCBDaHJpc3RvcGggSGVsbHdpZyB3cm90 ZToNCj4gSW5zdGVhZCBkZWNsYXJlIGFsbCBmdW5jdGlvbnMgd2l0aCB0aGUgcHJvcGVyIG1ldGhv ZHMgc2lnbmF0dXJlLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoIEhlbGx3aWcgPGhj aEBsc3QuZGU+DQo+IC0tLQ0KPiDCoGZzL25mcy9jYWxsYmFjay5owqDCoMKgwqDCoMKgfCAyNyAr KysrKystLS0tLS0tLS0tDQo+IMKgZnMvbmZzL2NhbGxiYWNrX3Byb2MuYyB8IDMzICsrKysrKysr KysrKy0tLS0tLS0NCj4gwqBmcy9uZnMvY2FsbGJhY2tfeGRyLmPCoMKgfCA4NiArKysrKysrKysr KysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tDQo+IC0tLS0tLS0tLS0NCj4gwqAzIGZpbGVz IGNoYW5nZWQsIDc3IGluc2VydGlvbnMoKyksIDY5IGRlbGV0aW9ucygtKQ0KPiANCg0KQWNrZWQt Ynk6IFRyb25kIE15a2xlYnVzdCA8dHJvbmQubXlrbGVidXN0QHByaW1hcnlkYXRhLmNvbT4NCi0t IA0KVHJvbmQgTXlrbGVidXN0DQpMaW51eCBORlMgY2xpZW50IG1haW50YWluZXIsIFByaW1hcnlE YXRhDQp0cm9uZC5teWtsZWJ1c3RAcHJpbWFyeWRhdGEuY29tDQo=
PATCH 14/32 RFC: sunrpc: remove p_count
In reply to Christoph Hellwigp_count is the only writeable memeber of struct rpc_procinfo, which is a good candidate to be const-ified as it contains function pointers.
This patch just removes it and returns zero in the /proc file as the count of calls per procedure doesn't seem all that useful. But it's just a dumb hack and we might need a proper fix instead.
--- include/linux/sunrpc/clnt.h | 1 - net/sunrpc/clnt.c | 1 - net/sunrpc/stats.c | 3 +-- 3 files changed, 1 insertion(+), 4 deletions(-)
include/linux/sunrpc/clnt.h +0 -1
@@ -99,7 +99,6 @@ struct rpc_procinfo {kxdrdproc_t p_decode;/* XDR decode function */ unsigned int p_arglen;/* argument hdr length (u32) */ unsigned int p_replen;/* reply hdr length (u32) */ -unsigned int p_count;/* call count */ unsigned int p_timer;/* Which RTT timer to use */ u32 p_statidx;/* Which procedure to account */ const char * p_name;/* name of procedure */
net/sunrpc/clnt.c +0 -1
@@ -1532,7 +1532,6 @@ call_start(struct rpc_task *task) (RPC_IS_ASYNC(task) ? "async" : "sync"));/* Increment call count */ - task->tk_msg.rpc_proc->p_count++; clnt->cl_stats->rpccnt++; task->tk_action = call_reserve; }
net/sunrpc/stats.c +1 -2
@@ -55,8 +55,7 @@ static int rpc_proc_show(struct seq_file *seq, void *v) {seq_printf (seq,"proc%u %u" , vers->number, vers->nrprocs);for (j =0 ; j < vers->nrprocs; j++) -seq_printf (seq," %u" , - vers->procs[j].p_count); +seq_printf (seq," %u" ,0 );seq_putc (seq,'\n' ); }return 0 ;
Signature · 1 line
2.11.0
Re: [PATCH 14/32] RFC: sunrpc: remove p_count
T24gVHVlLCAyMDE3LTA1LTA5IGF0IDExOjE5ICswMjAwLCBDaHJpc3RvcGggSGVsbHdpZyB3cm90 ZToNCj4gcF9jb3VudCBpcyB0aGUgb25seSB3cml0ZWFibGUgbWVtZWJlciBvZiBzdHJ1Y3QgcnBj X3Byb2NpbmZvLCB3aGljaA0KPiBpcw0KPiBhIGdvb2QgY2FuZGlkYXRlIHRvIGJlIGNvbnN0LWlm aWVkIGFzIGl0IGNvbnRhaW5zIGZ1bmN0aW9uIHBvaW50ZXJzLg0KPiANCj4gVGhpcyBwYXRjaCBq dXN0IHJlbW92ZXMgaXQgYW5kIHJldHVybnMgemVybyBpbiB0aGUgL3Byb2MgZmlsZSBhcyB0aGUN Cj4gY291bnQgb2YgY2FsbHMgcGVyIHByb2NlZHVyZSBkb2Vzbid0IHNlZW0gYWxsIHRoYXQgdXNl ZnVsLsKgwqBCdXQgaXQncw0KPiBqdXN0IGEgZHVtYiBoYWNrIGFuZCB3ZSBtaWdodCBuZWVkIGEg cHJvcGVyIGZpeCBpbnN0ZWFkLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoIEhlbGx3 aWcgPGhjaEBsc3QuZGU+DQo+IC0tLQ0KPiDCoGluY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaCB8 IDEgLQ0KPiDCoG5ldC9zdW5ycGMvY2xudC5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHwgMSAtDQo+ IMKgbmV0L3N1bnJwYy9zdGF0cy5jwqDCoMKgwqDCoMKgwqDCoMKgwqB8IDMgKy0tDQo+IMKgMyBm aWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgNCBkZWxldGlvbnMoLSkNCj4gDQo+IGRpZmYg LS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50LmgNCj4gYi9pbmNsdWRlL2xpbnV4L3N1 bnJwYy9jbG50LmgNCj4gaW5kZXggNjA5NWVjYmEwZGRlLi5kMWY2Nzc4YzdkYTcgMTAwNjQ0DQo+ IC0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaA0KPiArKysgYi9pbmNsdWRlL2xpbnV4 L3N1bnJwYy9jbG50LmgNCj4gQEAgLTk5LDcgKzk5LDYgQEAgc3RydWN0IHJwY19wcm9jaW5mbyB7 DQo+IMKgCWt4ZHJkcHJvY190CQlwX2RlY29kZTsJLyogWERSIGRlY29kZQ0KPiBmdW5jdGlvbiAq Lw0KPiDCoAl1bnNpZ25lZCBpbnQJCXBfYXJnbGVuOwkvKiBhcmd1bWVudCBoZHINCj4gbGVuZ3Ro ICh1MzIpICovDQo+IMKgCXVuc2lnbmVkIGludAkJcF9yZXBsZW47CS8qIHJlcGx5IGhkcg0KPiBs ZW5ndGggKHUzMikgKi8NCj4gLQl1bnNpZ25lZCBpbnQJCXBfY291bnQ7CS8qIGNhbGwgY291bnQg Ki8NCj4gwqAJdW5zaWduZWQgaW50CQlwX3RpbWVyOwkvKiBXaGljaCBSVFQNCj4gdGltZXIgdG8g dXNlICovDQo+IMKgCXUzMgkJCXBfc3RhdGlkeDsJLyogV2hpY2gNCj4gcHJvY2VkdXJlIHRvIGFj Y291bnQgKi8NCj4gwqAJY29uc3QgY2hhciAqCQlwX25hbWU7CQkvKiBuYW1lDQo+IG9mIHByb2Nl ZHVyZSAqLw0KPiBkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9jbG50LmMgYi9uZXQvc3VucnBjL2Ns bnQuYw0KPiBpbmRleCBiZGI3NWY3NDg4ZTkuLmU2ZDJhZTQ5ZDc5MSAxMDA2NDQNCj4gLS0tIGEv bmV0L3N1bnJwYy9jbG50LmMNCj4gKysrIGIvbmV0L3N1bnJwYy9jbG50LmMNCj4gQEAgLTE1MzIs NyArMTUzMiw2IEBAIGNhbGxfc3RhcnQoc3RydWN0IHJwY190YXNrICp0YXNrKQ0KPiDCoAkJCShS UENfSVNfQVNZTkModGFzaykgPyAiYXN5bmMiIDogInN5bmMiKSk7DQo+IMKgDQo+IMKgCS8qIElu Y3JlbWVudCBjYWxsIGNvdW50ICovDQo+IC0JdGFzay0+dGtfbXNnLnJwY19wcm9jLT5wX2NvdW50 Kys7DQo+IMKgCWNsbnQtPmNsX3N0YXRzLT5ycGNjbnQrKzsNCj4gwqAJdGFzay0+dGtfYWN0aW9u ID0gY2FsbF9yZXNlcnZlOw0KPiDCoH0NCj4gZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3RhdHMu YyBiL25ldC9zdW5ycGMvc3RhdHMuYw0KPiBpbmRleCBjYWViMDFhZDJiNWEuLjg4YjFlMThjMGRk NiAxMDA2NDQNCj4gLS0tIGEvbmV0L3N1bnJwYy9zdGF0cy5jDQo+ICsrKyBiL25ldC9zdW5ycGMv c3RhdHMuYw0KPiBAQCAtNTUsOCArNTUsNyBAQCBzdGF0aWMgaW50IHJwY19wcm9jX3Nob3coc3Ry dWN0IHNlcV9maWxlICpzZXEsIHZvaWQNCj4gKnYpIHsNCj4gwqAJCXNlcV9wcmludGYoc2VxLCAi cHJvYyV1ICV1IiwNCj4gwqAJCQkJCXZlcnMtPm51bWJlciwgdmVycy0NCj4gPm5ycHJvY3MpOw0K PiDCoAkJZm9yIChqID0gMDsgaiA8IHZlcnMtPm5ycHJvY3M7IGorKykNCj4gLQkJCXNlcV9wcmlu dGYoc2VxLCAiICV1IiwNCj4gLQkJCQkJdmVycy0+cHJvY3Nbal0ucF9jb3VudCk7DQo+ICsJCQlz ZXFfcHJpbnRmKHNlcSwgIiAldSIsIDApOw0KPiDCoAkJc2VxX3B1dGMoc2VxLCAnXG4nKTsNCj4g wqAJfQ0KPiDCoAlyZXR1cm4gMDsNCg0KQWdhaW4sIHdlIHJlYWxseSBkbyBub3Qgd2FudCB0byBi cmVhayBuZnNzdGF0IG9yIG1vdW50c3RhdHMuIEEgc2VwYXJhdGUNCnN0YXRpc3RpY3Mgc3RydWN0 dXJlIHNlZW1zIHRoZSB3YXkgdG8gZ28uDQoNCi0tIA0KVHJvbmQgTXlrbGVidXN0DQpMaW51eCBO RlMgY2xpZW50IG1haW50YWluZXIsIFByaW1hcnlEYXRhDQp0cm9uZC5teWtsZWJ1c3RAcHJpbWFy eWRhdGEuY29tDQo=
PATCH 15/32 sunrpc: mark all struct rpc_procinfo instances as const
In reply to Christoph Hellwigstruct rpc_procinfo contains function pointers, and marking it as constant avoids it being able to be used as an attach vector for code injections.
--- fs/lockd/clnt4xdr.c | 2 +- fs/lockd/clntxdr.c | 2 +- fs/lockd/mon.c | 2 +- fs/nfs/internal.h | 6 +++--- fs/nfs/mount_clnt.c | 4 ++-- fs/nfs/nfs2xdr.c | 2 +- fs/nfs/nfs3xdr.c | 4 ++-- fs/nfs/nfs4_fs.h | 2 +- fs/nfs/nfs4xdr.c | 2 +- fs/nfsd/nfs4callback.c | 2 +- include/linux/sunrpc/clnt.h | 4 ++-- include/linux/sunrpc/sched.h | 2 +- net/sunrpc/auth_gss/gss_rpc_upcall.c | 2 +- net/sunrpc/clnt.c | 4 ++-- net/sunrpc/rpcb_clnt.c | 19 ++++++++++--------- net/sunrpc/stats.c | 2 +- 16 files changed, 31 insertions(+), 30 deletions(-)
fs/lockd/clnt4xdr.c +1 -1
@@ -584,7 +584,7 @@ static int nlm4_xdr_dec_res(struct rpc_rqst *req, .p_name = #proc, \ } -static struct rpc_procinfo nlm4_procedures[] = { +static const struct rpc_procinfo nlm4_procedures[] = {PROC (TEST , testargs, testres),PROC (LOCK , lockargs, res),PROC (CANCEL , cancargs, res),
fs/lockd/clntxdr.c +1 -1
@@ -582,7 +582,7 @@ static int nlm_xdr_dec_res(struct rpc_rqst *req, .p_name = #proc, \ } -static struct rpc_procinfo nlm_procedures[] = { +static const struct rpc_procinfo nlm_procedures[] = {PROC (TEST , testargs, testres),PROC (LOCK , lockargs, res),PROC (CANCEL , cancargs, res),
fs/lockd/mon.c +1 -1
@@ -531,7 +531,7 @@ static int nsm_xdr_dec_stat(struct rpc_rqst *rqstp,#define SM_monres_sz 2#define SM_unmonres_sz 1 -static struct rpc_procinfo nsm_procedures[] = { +static const struct rpc_procinfo nsm_procedures[] = { [NSMPROC_MON ] = { .p_proc =NSMPROC_MON , .p_encode = nsm_xdr_enc_mon,
fs/nfs/internal.h +3 -3
@@ -270,12 +270,12 @@ static inline bool nfs_match_open_context(const struct nfs_open_context *ctx1, }/* nfs2xdr.c */ -extern struct rpc_procinfo nfs_procedures[]; +extern const struct rpc_procinfo nfs_procedures[];extern int nfs2_decode_dirent (struct xdr_stream *,struct nfs_entry *,int );/* nfs3xdr.c */ -extern struct rpc_procinfo nfs3_procedures[]; +extern const struct rpc_procinfo nfs3_procedures[];extern int nfs3_decode_dirent (struct xdr_stream *,struct nfs_entry *,int );
@@ -292,7 +292,7 @@ extern const u32 nfs41_maxgetdevinfo_overhead;/* nfs4proc.c */ #if IS_ENABLED (CONFIG_NFS_V4 ) -extern struct rpc_procinfo nfs4_procedures[]; +extern const struct rpc_procinfo nfs4_procedures[];#endif #ifdef CONFIG_NFS_V4_SECURITY_LABEL
fs/nfs/mount_clnt.c +2 -2
@@ -466,7 +466,7 @@ static int mnt_xdr_dec_mountres3(struct rpc_rqst *req,return decode_auth_flavors (xdr, res); } -static struct rpc_procinfo mnt_procedures[] = { +static const struct rpc_procinfo mnt_procedures[] = { [MOUNTPROC_MNT ] = { .p_proc =MOUNTPROC_MNT , .p_encode = mnt_xdr_enc_dirpath,
@@ -485,7 +485,7 @@ static struct rpc_procinfo mnt_procedures[] = { }, }; -static struct rpc_procinfo mnt3_procedures[] = { +static const struct rpc_procinfo mnt3_procedures[] = { [MOUNTPROC3_MNT ] = { .p_proc =MOUNTPROC3_MNT , .p_encode = mnt_xdr_enc_dirpath,
fs/nfs/nfs2xdr.c +1 -1
@@ -1152,7 +1152,7 @@ static int nfs_stat_to_errno(enum nfs_stat status) .p_statidx = NFSPROC_##proc, \ .p_name = #proc, \ } -struct rpc_procinfo nfs_procedures[] = { +const struct rpc_procinfo nfs_procedures[] = {PROC (GETATTR , fhandle, attrstat,1 ),PROC (SETATTR , sattrargs, attrstat,0 ),PROC (LOOKUP , diropargs, diropres,2 ),
fs/nfs/nfs3xdr.c +2 -2
@@ -2554,7 +2554,7 @@ static int nfs3_stat_to_errno(enum nfs_stat status) .p_name = #proc, \ } -struct rpc_procinfo nfs3_procedures[] = { +const struct rpc_procinfo nfs3_procedures[] = {PROC (GETATTR , getattr, getattr,1 ),PROC (SETATTR , setattr, setattr,0 ),PROC (LOOKUP , lookup, lookup,2 ),
@@ -2585,7 +2585,7 @@ const struct rpc_version nfs_version3 = { }; #ifdef CONFIG_NFS_V3_ACL -static struct rpc_procinfo nfs3_acl_procedures[] = { +static const struct rpc_procinfo nfs3_acl_procedures[] = { [ACLPROC3_GETACL] = { .p_proc = ACLPROC3_GETACL, .p_encode = nfs3_xdr_enc_getacl3args,
fs/nfs/nfs4_fs.h +1 -1
@@ -493,7 +493,7 @@ static inline void nfs4_unregister_sysctl(void)#endif /* nfs4xdr.c */ -extern struct rpc_procinfo nfs4_procedures[]; +extern const struct rpc_procinfo nfs4_procedures[];struct nfs4_mount_data ;
fs/nfs/nfs4xdr.c +1 -1
@@ -7606,7 +7606,7 @@ nfs4_stat_to_errno(int stat) .p_name = #proc, \ } -struct rpc_procinfo nfs4_procedures[] = { +const struct rpc_procinfo nfs4_procedures[] = {PROC (READ , enc_read, dec_read),PROC (WRITE , enc_write, dec_write),PROC (COMMIT , enc_commit, dec_commit),
fs/nfsd/nfs4callback.c +1 -1
@@ -696,7 +696,7 @@ static int nfs4_xdr_dec_cb_notify_lock(struct rpc_rqst *rqstp, .p_name = #proc, \ } -static struct rpc_procinfo nfs4_cb_procedures[] = { +static const struct rpc_procinfo nfs4_cb_procedures[] = {PROC (CB_NULL ,NULL , cb_null, cb_null),PROC (CB_RECALL ,COMPOUND , cb_recall, cb_recall), #ifdef CONFIG_NFSD_PNFS
include/linux/sunrpc/clnt.h +2 -2
@@ -39,7 +39,7 @@ struct rpc_clnt {struct list_head cl_tasks;/* List of tasks */ spinlock_t cl_lock;/* spinlock */ struct rpc_xprt __rcu * cl_xprt;/* transport */ -struct rpc_procinfo * cl_procinfo;/* procedure info */ +const struct rpc_procinfo *cl_procinfo;/* procedure info */ u32 cl_prog,/* RPC program number */ cl_vers,/* RPC version number */ cl_maxproc;/* max procedure number */
@@ -87,7 +87,7 @@ struct rpc_program {struct rpc_version {u32 number;/* version number */ unsigned int nrprocs;/* number of procs */ -struct rpc_procinfo * procs;/* procedure array */ +const struct rpc_procinfo *procs;/* procedure array */ };/*
include/linux/sunrpc/sched.h +1 -1
@@ -22,7 +22,7 @@*/ struct rpc_procinfo ;struct rpc_message { -struct rpc_procinfo * rpc_proc;/* Procedure information */ +const struct rpc_procinfo *rpc_proc;/* Procedure information */ void * rpc_argp;/* Arguments */ void * rpc_resp;/* Result */ struct rpc_cred * rpc_cred;/* Credentials */
net/sunrpc/auth_gss/gss_rpc_upcall.c +1 -1
@@ -63,7 +63,7 @@ enum { .p_name = #proc, \ } -static struct rpc_procinfo gssp_procedures[] = { +static const struct rpc_procinfo gssp_procedures[] = {PROC (INDICATE_MECHS , indicate_mechs),PROC (GET_CALL_CONTEXT , get_call_context),PROC (IMPORT_AND_CANON_NAME , import_and_canon_name),
net/sunrpc/clnt.c +2 -2
@@ -1679,7 +1679,7 @@ call_allocate(struct rpc_task *task)unsigned int slack = task->tk_rqstp->rq_cred->cr_auth->au_cslack;struct rpc_rqst *req = task->tk_rqstp;struct rpc_xprt *xprt = req->rq_xprt; -struct rpc_procinfo *proc = task->tk_msg.rpc_proc; +const struct rpc_procinfo *proc = task->tk_msg.rpc_proc;int status;dprint_status (task);
@@ -2494,7 +2494,7 @@ static int rpcproc_decode_null(struct rpc_rqst *rqstp, struct xdr_stream *xdr,return 0 ; } -static struct rpc_procinfo rpcproc_null = { +static const struct rpc_procinfo rpcproc_null = { .p_encode = rpcproc_encode_null, .p_decode = rpcproc_decode_null, };
net/sunrpc/rpcb_clnt.c +10 -9
@@ -128,13 +128,13 @@ struct rpcbind_args {int r_status; }; -static struct rpc_procinfo rpcb_procedures2[]; -static struct rpc_procinfo rpcb_procedures3[]; -static struct rpc_procinfo rpcb_procedures4[]; +static const struct rpc_procinfo rpcb_procedures2[]; +static const struct rpc_procinfo rpcb_procedures3[]; +static const struct rpc_procinfo rpcb_procedures4[];struct rpcb_info {u32 rpc_vers; -struct rpc_procinfo * rpc_proc; +const struct rpc_procinfo *rpc_proc; };static const struct rpcb_info rpcb_next_version[];
@@ -620,7 +620,8 @@ int rpcb_v4_register(struct net *net, const u32 program, const u32 version,return -EAFNOSUPPORT ; } -static struct rpc_task *rpcb_call_async (struct rpc_clnt *rpcb_clnt,struct rpcbind_args *map,struct rpc_procinfo *proc) +static struct rpc_task *rpcb_call_async (struct rpc_clnt *rpcb_clnt, +struct rpcbind_args *map,const struct rpc_procinfo *proc) {struct rpc_message msg = { .rpc_proc = proc,
@@ -671,7 +672,7 @@ static struct rpc_clnt *rpcb_find_transport_owner(struct rpc_clnt *clnt)void rpcb_getport_async (struct rpc_task *task) {struct rpc_clnt *clnt; -struct rpc_procinfo *proc; +const struct rpc_procinfo *proc;u32 bind_version;struct rpc_xprt *xprt;struct rpc_clnt *rpcb_clnt;
@@ -994,7 +995,7 @@ static int rpcb_dec_getaddr(struct rpc_rqst *req, struct xdr_stream *xdr,* since the Linux kernel RPC code requires only these. */ -static struct rpc_procinfo rpcb_procedures2[] = { +static const struct rpc_procinfo rpcb_procedures2[] = { [RPCBPROC_SET ] = { .p_proc =RPCBPROC_SET , .p_encode = rpcb_enc_mapping,
@@ -1027,7 +1028,7 @@ static struct rpc_procinfo rpcb_procedures2[] = { }, }; -static struct rpc_procinfo rpcb_procedures3[] = { +static const struct rpc_procinfo rpcb_procedures3[] = { [RPCBPROC_SET ] = { .p_proc =RPCBPROC_SET , .p_encode = rpcb_enc_getaddr,
@@ -1060,7 +1061,7 @@ static struct rpc_procinfo rpcb_procedures3[] = { }, }; -static struct rpc_procinfo rpcb_procedures4[] = { +static const struct rpc_procinfo rpcb_procedures4[] = { [RPCBPROC_SET ] = { .p_proc =RPCBPROC_SET , .p_encode = rpcb_enc_getaddr,
net/sunrpc/stats.c +1 -1
@@ -191,7 +191,7 @@ void rpc_count_iostats(const struct rpc_task *task, struct rpc_iostats *stats)EXPORT_SYMBOL_GPL (rpc_count_iostats);static void _print_name (struct seq_file *seq,unsigned int op, -struct rpc_procinfo *procs) +const struct rpc_procinfo *procs) {if (procs[op].p_name)seq_printf (seq,"\t%12s: " , procs[op].p_name);
Signature · 1 line
2.11.0
Re: [PATCH 15/32] sunrpc: mark all struct rpc_procinfo instances as const
T24gVHVlLCAyMDE3LTA1LTA5IGF0IDExOjE5ICswMjAwLCBDaHJpc3RvcGggSGVsbHdpZyB3cm90 ZToNCj4gc3RydWN0IHJwY19wcm9jaW5mbyBjb250YWlucyBmdW5jdGlvbiBwb2ludGVycywgYW5k IG1hcmtpbmcgaXQgYXMNCj4gY29uc3RhbnQgYXZvaWRzIGl0IGJlaW5nIGFibGUgdG8gYmUgdXNl ZCBhcyBhbiBhdHRhY2ggdmVjdG9yIGZvcg0KPiBjb2RlIGluamVjdGlvbnMuDQo+IA0KPiBTaWdu ZWQtb2ZmLWJ5OiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGxzdC5kZT4NCj4gLS0tDQo+IMKgZnMv bG9ja2QvY2xudDR4ZHIuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKg MiArLQ0KPiDCoGZzL2xvY2tkL2NsbnR4ZHIuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgfMKgwqAyICstDQo+IMKgZnMvbG9ja2QvbW9uLmPCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAyICstDQo+IMKgZnMvbmZzL2ludGVybmFs LmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqA2ICsrKy0tLQ0K PiDCoGZzL25mcy9tb3VudF9jbG50LmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB8wqDCoDQgKystLQ0KPiDCoGZzL25mcy9uZnMyeGRyLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDIgKy0NCj4gwqBmcy9uZnMvbmZzM3hkci5jwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqA0ICsrLS0NCj4gwqBmcy9u ZnMvbmZzNF9mcy5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKg wqAyICstDQo+IMKgZnMvbmZzL25mczR4ZHIuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHzCoMKgMiArLQ0KPiDCoGZzL25mc2QvbmZzNGNhbGxiYWNrLmPCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDIgKy0NCj4gwqBpbmNsdWRlL2xpbnV4L3N1bnJw Yy9jbG50LmjCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgNCArKy0tDQo+IMKgaW5jbHVkZS9saW51 eC9zdW5ycGMvc2NoZWQuaMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMiArLQ0KPiDCoG5ldC9zdW5y cGMvYXV0aF9nc3MvZ3NzX3JwY191cGNhbGwuYyB8wqDCoDIgKy0NCj4gwqBuZXQvc3VucnBjL2Ns bnQuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDQgKystLQ0K PiDCoG5ldC9zdW5ycGMvcnBjYl9jbG50LmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8 IDE5ICsrKysrKysrKystLS0tLS0tLS0NCj4gwqBuZXQvc3VucnBjL3N0YXRzLmPCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMiArLQ0KPiDCoDE2IGZpbGVzIGNoYW5n ZWQsIDMxIGluc2VydGlvbnMoKyksIDMwIGRlbGV0aW9ucygtKQ0KPiANCj4gDQpBY2tlZC1ieTog VHJvbmQgTXlrbGVidXN0IDx0cm9uZC5teWtsZWJ1c3RAcHJpbWFyeWRhdGEuY29tPg0KLS0gDQpU cm9uZCBNeWtsZWJ1c3QNCkxpbnV4IE5GUyBjbGllbnQgbWFpbnRhaW5lciwgUHJpbWFyeURhdGEN CnRyb25kLm15a2xlYnVzdEBwcmltYXJ5ZGF0YS5jb20NCg==
PATCH 16/32 lockd: fix some weird indentation
In reply to Christoph HellwigRemove double indentation of a few struct rpc_version and struct rpc_program instance.
--- fs/lockd/clntxdr.c | 22 +++++++++++----------- fs/lockd/mon.c | 16 ++++++++-------- 2 files changed, 19 insertions(+), 19 deletions(-)
fs/lockd/clntxdr.c +11 -11
@@ -601,15 +601,15 @@ static const struct rpc_procinfo nlm_procedures[] = { };static const struct rpc_version nlm_version1 = { - .number =1 , - .nrprocs =ARRAY_SIZE (nlm_procedures), - .procs = nlm_procedures, + .number =1 , + .nrprocs =ARRAY_SIZE (nlm_procedures), + .procs = nlm_procedures, };static const struct rpc_version nlm_version3 = { - .number =3 , - .nrprocs =ARRAY_SIZE (nlm_procedures), - .procs = nlm_procedures, + .number =3 , + .nrprocs =ARRAY_SIZE (nlm_procedures), + .procs = nlm_procedures, };static const struct rpc_version *nlm_versions[] = {
@@ -623,9 +623,9 @@ static const struct rpc_version *nlm_versions[] = {static struct rpc_stat nlm_rpc_stats;const struct rpc_program nlm_program = { - .name ="lockd" , - .number =NLM_PROGRAM , - .nrvers =ARRAY_SIZE (nlm_versions), - .version = nlm_versions, - .stats = &nlm_rpc_stats, + .name ="lockd" , + .number =NLM_PROGRAM , + .nrvers =ARRAY_SIZE (nlm_versions), + .version = nlm_versions, + .stats = &nlm_rpc_stats, };
fs/lockd/mon.c +8 -8
@@ -553,9 +553,9 @@ static const struct rpc_procinfo nsm_procedures[] = { };static const struct rpc_version nsm_version1 = { - .number =1 , - .nrprocs =ARRAY_SIZE (nsm_procedures), - .procs = nsm_procedures + .number =1 , + .nrprocs =ARRAY_SIZE (nsm_procedures), + .procs = nsm_procedures };static const struct rpc_version *nsm_version[] = {
@@ -565,9 +565,9 @@ static const struct rpc_version *nsm_version[] = {static struct rpc_stat nsm_stats;static const struct rpc_program nsm_program = { - .name ="statd" , - .number =NSM_PROGRAM , - .nrvers =ARRAY_SIZE (nsm_version), - .version = nsm_version, - .stats = &nsm_stats + .name ="statd" , + .number =NSM_PROGRAM , + .nrvers =ARRAY_SIZE (nsm_version), + .version = nsm_version, + .stats = &nsm_stats };
Signature · 1 line
2.11.0
Re: [PATCH 16/32] lockd: fix some weird indentation
T24gVHVlLCAyMDE3LTA1LTA5IGF0IDExOjE5ICswMjAwLCBDaHJpc3RvcGggSGVsbHdpZyB3cm90 ZToNCj4gUmVtb3ZlIGRvdWJsZSBpbmRlbnRhdGlvbiBvZiBhIGZldyBzdHJ1Y3QgcnBjX3ZlcnNp b24gYW5kDQo+IHN0cnVjdCBycGNfcHJvZ3JhbSBpbnN0YW5jZS4NCj4gDQo+IFNpZ25lZC1vZmYt Ynk6IENocmlzdG9waCBIZWxsd2lnIDxoY2hAbHN0LmRlPg0KPiAtLS0NCj4gwqBmcy9sb2NrZC9j bG50eGRyLmMgfCAyMiArKysrKysrKysrKy0tLS0tLS0tLS0tDQo+IMKgZnMvbG9ja2QvbW9uLmPC oMKgwqDCoMKgfCAxNiArKysrKysrKy0tLS0tLS0tDQo+IMKgMiBmaWxlcyBjaGFuZ2VkLCAxOSBp bnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkNCj4gDQo+IGRpZmYgLS1naXQgYS9mcy9sb2Nr ZC9jbG50eGRyLmMgYi9mcy9sb2NrZC9jbG50eGRyLmMNCj4gaW5kZXggY2NjZjVjMmZmYWRiLi43 YmM1NDE2MmY1YmYgMTAwNjQ0DQo+IC0tLSBhL2ZzL2xvY2tkL2NsbnR4ZHIuYw0KPiArKysgYi9m cy9sb2NrZC9jbG50eGRyLmMNCj4gQEAgLTYwMSwxNSArNjAxLDE1IEBAIHN0YXRpYyBjb25zdCBz dHJ1Y3QgcnBjX3Byb2NpbmZvDQo+IG5sbV9wcm9jZWR1cmVzW10gPSB7DQo+IMKgfTsNCj4gwqAN Cj4gwqBzdGF0aWMgY29uc3Qgc3RydWN0IHJwY192ZXJzaW9uCW5sbV92ZXJzaW9uMSA9IHsNCj4g LQkJLm51bWJlcgkJPSAxLA0KPiAtCQkubnJwcm9jcwk9IEFSUkFZX1NJWkUobmxtX3Byb2NlZHVy ZXMpLA0KPiAtCQkucHJvY3MJCT0gbmxtX3Byb2NlZHVyZXMsDQo+ICsJLm51bWJlcgkJPSAxLA0K PiArCS5ucnByb2NzCT0gQVJSQVlfU0laRShubG1fcHJvY2VkdXJlcyksDQo+ICsJLnByb2NzCQk9 IG5sbV9wcm9jZWR1cmVzLA0KPiDCoH07DQo+IMKgDQo+IMKgc3RhdGljIGNvbnN0IHN0cnVjdCBy cGNfdmVyc2lvbglubG1fdmVyc2lvbjMgPSB7DQo+IC0JCS5udW1iZXIJCT0gMywNCj4gLQkJLm5y cHJvY3MJPSBBUlJBWV9TSVpFKG5sbV9wcm9jZWR1cmVzKSwNCj4gLQkJLnByb2NzCQk9IG5sbV9w cm9jZWR1cmVzLA0KPiArCS5udW1iZXIJCT0gMywNCj4gKwkubnJwcm9jcwk9IEFSUkFZX1NJWkUo bmxtX3Byb2NlZHVyZXMpLA0KPiArCS5wcm9jcwkJPSBubG1fcHJvY2VkdXJlcywNCj4gwqB9Ow0K PiDCoA0KPiDCoHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX3ZlcnNpb24JKm5sbV92ZXJzaW9uc1td ID0gew0KPiBAQCAtNjIzLDkgKzYyMyw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX3ZlcnNp b24JKm5sbV92ZXJzaQ0KPiBvbnNbXSA9IHsNCj4gwqBzdGF0aWMgc3RydWN0IHJwY19zdGF0CQlu bG1fcnBjX3N0YXRzOw0KPiDCoA0KPiDCoGNvbnN0IHN0cnVjdCBycGNfcHJvZ3JhbQlubG1fcHJv Z3JhbSA9IHsNCj4gLQkJLm5hbWUJCT0gImxvY2tkIiwNCj4gLQkJLm51bWJlcgkJPSBOTE1fUFJP R1JBTSwNCj4gLQkJLm5ydmVycwkJPSBBUlJBWV9TSVpFKG5sbV92ZXJzaW9ucyksDQo+IC0JCS52 ZXJzaW9uCT0gbmxtX3ZlcnNpb25zLA0KPiAtCQkuc3RhdHMJCT0gJm5sbV9ycGNfc3RhdHMsDQo+ ICsJLm5hbWUJCT0gImxvY2tkIiwNCj4gKwkubnVtYmVyCQk9IE5MTV9QUk9HUkFNLA0KPiArCS5u cnZlcnMJCT0gQVJSQVlfU0laRShubG1fdmVyc2lvbnMpLA0KPiArCS52ZXJzaW9uCT0gbmxtX3Zl cnNpb25zLA0KPiArCS5zdGF0cwkJPSAmbmxtX3JwY19zdGF0cywNCj4gwqB9Ow0KPiBkaWZmIC0t Z2l0IGEvZnMvbG9ja2QvbW9uLmMgYi9mcy9sb2NrZC9tb24uYw0KPiBpbmRleCAyYzQxZGU4ZGIx ZjAuLjBlYjU1YjRkNzViNiAxMDA2NDQNCj4gLS0tIGEvZnMvbG9ja2QvbW9uLmMNCj4gKysrIGIv ZnMvbG9ja2QvbW9uLmMNCj4gQEAgLTU1Myw5ICs1NTMsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 IHJwY19wcm9jaW5mbyBuc21fcHJvY2VkdXJlc1tdDQo+ID0gew0KPiDCoH07DQo+IMKgDQo+IMKg c3RhdGljIGNvbnN0IHN0cnVjdCBycGNfdmVyc2lvbiBuc21fdmVyc2lvbjEgPSB7DQo+IC0JCS5u dW1iZXIJCT0gMSwNCj4gLQkJLm5ycHJvY3MJPSBBUlJBWV9TSVpFKG5zbV9wcm9jZWR1cmVzKSwN Cj4gLQkJLnByb2NzCQk9IG5zbV9wcm9jZWR1cmVzDQo+ICsJLm51bWJlcgkJPSAxLA0KPiArCS5u cnByb2NzCT0gQVJSQVlfU0laRShuc21fcHJvY2VkdXJlcyksDQo+ICsJLnByb2NzCQk9IG5zbV9w cm9jZWR1cmVzDQo+IMKgfTsNCj4gwqANCj4gwqBzdGF0aWMgY29uc3Qgc3RydWN0IHJwY192ZXJz aW9uICpuc21fdmVyc2lvbltdID0gew0KPiBAQCAtNTY1LDkgKzU2NSw5IEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3QgcnBjX3ZlcnNpb24gKm5zbV92ZXJzaW9uW10gPQ0KPiB7DQo+IMKgc3RhdGljIHN0 cnVjdCBycGNfc3RhdAkJbnNtX3N0YXRzOw0KPiDCoA0KPiDCoHN0YXRpYyBjb25zdCBzdHJ1Y3Qg cnBjX3Byb2dyYW0gbnNtX3Byb2dyYW0gPSB7DQo+IC0JCS5uYW1lCQk9ICJzdGF0ZCIsDQo+IC0J CS5udW1iZXIJCT0gTlNNX1BST0dSQU0sDQo+IC0JCS5ucnZlcnMJCT0gQVJSQVlfU0laRShuc21f dmVyc2lvbiksDQo+IC0JCS52ZXJzaW9uCT0gbnNtX3ZlcnNpb24sDQo+IC0JCS5zdGF0cwkJPSAm bnNtX3N0YXRzDQo+ICsJLm5hbWUJCT0gInN0YXRkIiwNCj4gKwkubnVtYmVyCQk9IE5TTV9QUk9H UkFNLA0KPiArCS5ucnZlcnMJCT0gQVJSQVlfU0laRShuc21fdmVyc2lvbiksDQo+ICsJLnZlcnNp b24JPSBuc21fdmVyc2lvbiwNCj4gKwkuc3RhdHMJCT0gJm5zbV9zdGF0cw0KPiDCoH07DQoNCkFj a2VkLWJ5OiBUcm9uZCBNeWtsZWJ1c3QgPHRyb25kLm15a2xlYnVzdEBwcmltYXJ5ZGF0YS5jb20+ DQoNCi0tIA0KVHJvbmQgTXlrbGVidXN0DQpMaW51eCBORlMgY2xpZW50IG1haW50YWluZXIsIFBy aW1hcnlEYXRhDQp0cm9uZC5teWtsZWJ1c3RAcHJpbWFyeWRhdGEuY29tDQo=
PATCH 17/32 nfsd4: const-ify nfs_cb_version4
In reply to Christoph Hellwig--- fs/nfsd/nfs4callback.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/nfsd/nfs4callback.c +1 -1
@@ -705,7 +705,7 @@ static const struct rpc_procinfo nfs4_cb_procedures[] = { PROC(CB_NOTIFY_LOCK, COMPOUND, cb_notify_lock, cb_notify_lock), }; -static struct rpc_version nfs_cb_version4 = { +static const struct rpc_version nfs_cb_version4 = {/* * Note on the callback rpc program version number: despite language in rfc * 5661 section 18.36.3 requiring servers to use 4 in this field, the
Signature · 1 line
2.11.0
PATCH 18/32 nfsd: use named initializers in PROC()
In reply to Christoph Hellwig--- fs/nfsd/nfs2acl.c | 22 +++++++++++----------- fs/nfsd/nfs3acl.c | 22 +++++++++++----------- fs/nfsd/nfs4proc.c | 10 +++++----- 3 files changed, 27 insertions(+), 27 deletions(-)
fs/nfsd/nfs2acl.c +11 -11
@@ -345,17 +345,17 @@ static int nfsaclsvc_release_access(struct svc_rqst *rqstp, __be32 *p,#define nfsd3_voidres nfsd3_voidargsstruct nfsd3_voidargs {int dummy; }; -#define PROC (name, argt, rest, relt, cache, respsize) \ - { (svc_procfunc) nfsacld_proc_##name, \ - (kxdrproc_t) nfsaclsvc_decode_##argt##args, \ - (kxdrproc_t) nfsaclsvc_encode_##rest##res, \ - (kxdrproc_t) nfsaclsvc_release_##relt, \ - sizeof(struct nfsd3_##argt##args), \ - sizeof(struct nfsd3_##rest##res), \ - 0, \ - cache, \ - respsize, \ - } +#define PROC (name, argt, rest, relt, cache, respsize) \ +{ \ + .pc_func = (svc_procfunc) nfsacld_proc_##name, \ + .pc_decode = (kxdrproc_t) nfsaclsvc_decode_##argt##args, \ + .pc_encode = (kxdrproc_t) nfsaclsvc_encode_##rest##res, \ + .pc_release = (kxdrproc_t) nfsaclsvc_release_##relt, \ + .pc_argsize = sizeof(struct nfsd3_##argt##args), \ + .pc_ressize = sizeof(struct nfsd3_##rest##res), \ + .pc_cachetype = cache, \ + .pc_xdrressize = respsize, \ +}#define ST 1/* status*/ #define AT 21/* attributes */
fs/nfsd/nfs3acl.c +11 -11
@@ -237,17 +237,17 @@ static int nfs3svc_release_getacl(struct svc_rqst *rqstp, __be32 *p,#define nfsd3_voidres nfsd3_voidargsstruct nfsd3_voidargs {int dummy; }; -#define PROC (name, argt, rest, relt, cache, respsize) \ - { (svc_procfunc) nfsd3_proc_##name, \ - (kxdrproc_t) nfs3svc_decode_##argt##args, \ - (kxdrproc_t) nfs3svc_encode_##rest##res, \ - (kxdrproc_t) nfs3svc_release_##relt, \ - sizeof(struct nfsd3_##argt##args), \ - sizeof(struct nfsd3_##rest##res), \ - 0, \ - cache, \ - respsize, \ - } +#define PROC (name, argt, rest, relt, cache, respsize) \ +{ \ + .pc_func = (svc_procfunc) nfsd3_proc_##name, \ + .pc_decode = (kxdrproc_t) nfs3svc_decode_##argt##args, \ + .pc_encode = (kxdrproc_t) nfs3svc_encode_##rest##res, \ + .pc_release = (kxdrproc_t) nfs3svc_release_##relt, \ + .pc_argsize = sizeof(struct nfsd3_##argt##args), \ + .pc_ressize = sizeof(struct nfsd3_##rest##res), \ + .pc_cachetype = cache, \ + .pc_xdrressize = respsize, \ +}#define ST 1/* status*/ #define AT 21/* attributes */
fs/nfsd/nfs4proc.c +5 -5
@@ -1672,10 +1672,10 @@ static void svcxdr_init_encode(struct svc_rqst *rqstp,* COMPOUND call. */ static __be32 -nfsd4_proc_compound (struct svc_rqst *rqstp, -struct nfsd4_compoundargs *args, -struct nfsd4_compoundres *resp) +nfsd4_proc_compound (struct svc_rqst *rqstp,void *arg,void *res) { +struct nfsd4_compoundargs *args = arg; +struct nfsd4_compoundres *resp = res;struct nfsd4_op *op;struct nfsd4_operation *opdesc;struct nfsd4_compound_state *cstate = &resp->cstate;
@@ -2517,7 +2517,7 @@ struct nfsd4_voidargs { int dummy; };static struct svc_procedure nfsd_procedures4[2 ] = { [NFSPROC4_NULL ] = { - .pc_func = (svc_procfunc ) nfsd4_proc_null, + .pc_func = nfsd4_proc_null, .pc_encode = (kxdrproc_t ) nfs4svc_encode_voidres, .pc_argsize =sizeof (struct nfsd4_voidargs ), .pc_ressize =sizeof (struct nfsd4_voidres ),
@@ -2525,7 +2525,7 @@ static struct svc_procedure nfsd_procedures4[2] = { .pc_xdrressize = 1, }, [NFSPROC4_COMPOUND] = { - .pc_func = (svc_procfunc) nfsd4_proc_compound, + .pc_func = nfsd4_proc_compound, .pc_decode = (kxdrproc_t) nfs4svc_decode_compoundargs, .pc_encode = (kxdrproc_t) nfs4svc_encode_compoundres, .pc_argsize = sizeof(struct nfsd4_compoundargs),
Signature · 1 line
2.11.0
PATCH 19/32 nfsd: remove the unused PROC() macro in nfs3proc.c
In reply to Christoph Hellwig--- fs/nfsd/nfs3proc.c | 12 ------------ 1 file changed, 12 deletions(-)
fs/nfsd/nfs3proc.c +0 -12
@@ -647,18 +647,6 @@ nfsd3_proc_commit(struct svc_rqst * rqstp, struct nfsd3_commitargs *argp,#define nfsd3_voidres nfsd3_voidargsstruct nfsd3_voidargs {int dummy; }; -#define PROC (name, argt, rest, relt, cache, respsize) \ - { (svc_procfunc) nfsd3_proc_##name, \ - (kxdrproc_t) nfs3svc_decode_##argt##args, \ - (kxdrproc_t) nfs3svc_encode_##rest##res, \ - (kxdrproc_t) nfs3svc_release_##relt, \ - sizeof(struct nfsd3_##argt##args), \ - sizeof(struct nfsd3_##rest##res), \ - 0, \ - cache, \ - respsize, \ - } -#define ST 1/* status*/ #define FH 17/* filehandle with length */ #define AT 21/* attributes */
Signature · 1 line
2.11.0
PATCH 20/32 sunrpc: properly type pc_func callbacks
In reply to Christoph HellwigDrop the argp and resp arguments as they 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 svc_procfunc as well as the svc_procfunc typedef itself.
--- fs/lockd/svc4proc.c | 118 ++++++++++++++++++++++------------- fs/lockd/svcproc.c | 118 ++++++++++++++++++++++------------- fs/nfs/callback_xdr.c | 7 ++- fs/nfsd/nfs2acl.c | 25 ++++---- fs/nfsd/nfs3acl.c | 15 ++--- fs/nfsd/nfs3proc.c | 151 ++++++++++++++++++++++++++------------------- fs/nfsd/nfs4proc.c | 9 +-- fs/nfsd/nfsproc.c | 104 +++++++++++++++++-------------- fs/nfsd/nfssvc.c | 2 +- include/linux/sunrpc/svc.h | 4 +- net/sunrpc/svc.c | 2 +- 11 files changed, 328 insertions(+), 227 deletions(-)
fs/lockd/svc4proc.c +75 -43
@@ -62,7 +62,7 @@ nlm4svc_retrieve_args(struct svc_rqst *rqstp, struct nlm_args *argp,* NULL: Test for presence of service */ static __be32 -nlm4svc_proc_null (struct svc_rqst *rqstp,void *argp,void *resp) +nlm4svc_proc_null (struct svc_rqst *rqstp) {dprintk ("lockd: NULL called\n" );return rpc_success;
@@ -72,9 +72,9 @@ nlm4svc_proc_null(struct svc_rqst *rqstp, void *argp, void *resp)* TEST: Check for conflicting lock */ static __be32 -nlm4svc_proc_test (struct svc_rqst *rqstp,struct nlm_args *argp, -struct nlm_res *resp) +__nlm4svc_proc_test (struct svc_rqst *rqstp,struct nlm_res *resp) { +struct nlm_args *argp = rqstp->rq_argp;struct nlm_host *host;struct nlm_file *file;__be32 rc = rpc_success;
@@ -99,9 +99,15 @@ nlm4svc_proc_test(struct svc_rqst *rqstp, struct nlm_args *argp, }static __be32 -nlm4svc_proc_lock (struct svc_rqst *rqstp,struct nlm_args *argp, -struct nlm_res *resp) +nlm4svc_proc_test (struct svc_rqst *rqstp) { +return __nlm4svc_proc_test (rqstp, rqstp->rq_resp); +} + +static __be32 +__nlm4svc_proc_lock (struct svc_rqst *rqstp,struct nlm_res *resp) +{ +struct nlm_args *argp = rqstp->rq_argp;struct nlm_host *host;struct nlm_file *file;__be32 rc = rpc_success;
@@ -141,9 +147,15 @@ nlm4svc_proc_lock(struct svc_rqst *rqstp, struct nlm_args *argp, }static __be32 -nlm4svc_proc_cancel (struct svc_rqst *rqstp,struct nlm_args *argp, -struct nlm_res *resp) +nlm4svc_proc_lock (struct svc_rqst *rqstp) +{ +return __nlm4svc_proc_lock (rqstp, rqstp->rq_resp); +} + +static __be32 +__nlm4svc_proc_cancel (struct svc_rqst *rqstp,struct nlm_res *resp) { +struct nlm_args *argp = rqstp->rq_argp;struct nlm_host *host;struct nlm_file *file;
@@ -170,13 +182,19 @@ nlm4svc_proc_cancel(struct svc_rqst *rqstp, struct nlm_args *argp,return rpc_success; } +static __be32 +nlm4svc_proc_cancel (struct svc_rqst *rqstp) +{ +return __nlm4svc_proc_cancel (rqstp, rqstp->rq_resp); +} +/* * UNLOCK: release a lock */ static __be32 -nlm4svc_proc_unlock (struct svc_rqst *rqstp,struct nlm_args *argp, -struct nlm_res *resp) +__nlm4svc_proc_unlock (struct svc_rqst *rqstp,struct nlm_res *resp) { +struct nlm_args *argp = rqstp->rq_argp;struct nlm_host *host;struct nlm_file *file;
@@ -203,14 +221,21 @@ nlm4svc_proc_unlock(struct svc_rqst *rqstp, struct nlm_args *argp,return rpc_success; } +static __be32 +nlm4svc_proc_unlock (struct svc_rqst *rqstp) +{ +return __nlm4svc_proc_unlock (rqstp, rqstp->rq_resp); +} +/* * GRANTED: A server calls us to tell that a process' lock request * was granted */ static __be32 -nlm4svc_proc_granted (struct svc_rqst *rqstp,struct nlm_args *argp, -struct nlm_res *resp) +__nlm4svc_proc_granted (struct svc_rqst *rqstp,struct nlm_res *resp) { +struct nlm_args *argp = rqstp->rq_argp; + resp->cookie = argp->cookie;dprintk ("lockd: GRANTED called\n" );
@@ -219,6 +244,12 @@ nlm4svc_proc_granted(struct svc_rqst *rqstp, struct nlm_args *argp,return rpc_success; } +static __be32 +nlm4svc_proc_granted (struct svc_rqst *rqstp) +{ +return __nlm4svc_proc_granted (rqstp, rqstp->rq_resp); +} +/* * This is the generic lockd callback for async RPC calls */
@@ -243,9 +274,10 @@ static const struct rpc_call_ops nlm4svc_callback_ops = {* because we send the callback before the reply proper. I hope this * doesn't break any clients. */ -static __be32 nlm4svc_callback (struct svc_rqst *rqstp,u32 proc,struct nlm_args *argp, -__be32 (*func)(struct svc_rqst *,struct nlm_args *,struct nlm_res *)) +static __be32 nlm4svc_callback (struct svc_rqst *rqstp,u32 proc, +__be32 (*func)(struct svc_rqst *,struct nlm_res *)) { +struct nlm_args *argp = rqstp->rq_argp;struct nlm_host *host;struct nlm_rqst *call;__be32 stat;
@@ -261,7 +293,7 @@ static __be32 nlm4svc_callback(struct svc_rqst *rqstp, u32 proc, struct nlm_argsif (call ==NULL )return rpc_system_err; - stat =func (rqstp, argp, &call->a_res); + stat =func (rqstp, &call->a_res);if (stat !=0 ) {nlmsvc_release_call (call);return stat;
@@ -273,48 +305,44 @@ static __be32 nlm4svc_callback(struct svc_rqst *rqstp, u32 proc, struct nlm_argsreturn rpc_success; } -static __be32 nlm4svc_proc_test_msg (struct svc_rqst *rqstp,struct nlm_args *argp, -void *resp) +static __be32 nlm4svc_proc_test_msg (struct svc_rqst *rqstp) {dprintk ("lockd: TEST_MSG called\n" ); -return nlm4svc_callback (rqstp,NLMPROC_TEST_RES , argp, nlm4svc_proc_test); +return nlm4svc_callback (rqstp,NLMPROC_TEST_RES , __nlm4svc_proc_test); } -static __be32 nlm4svc_proc_lock_msg (struct svc_rqst *rqstp,struct nlm_args *argp, -void *resp) +static __be32 nlm4svc_proc_lock_msg (struct svc_rqst *rqstp) {dprintk ("lockd: LOCK_MSG called\n" ); -return nlm4svc_callback (rqstp,NLMPROC_LOCK_RES , argp, nlm4svc_proc_lock); +return nlm4svc_callback (rqstp,NLMPROC_LOCK_RES , __nlm4svc_proc_lock); } -static __be32 nlm4svc_proc_cancel_msg (struct svc_rqst *rqstp,struct nlm_args *argp, -void *resp) +static __be32 nlm4svc_proc_cancel_msg (struct svc_rqst *rqstp) {dprintk ("lockd: CANCEL_MSG called\n" ); -return nlm4svc_callback (rqstp,NLMPROC_CANCEL_RES , argp, nlm4svc_proc_cancel); +return nlm4svc_callback (rqstp,NLMPROC_CANCEL_RES , __nlm4svc_proc_cancel); } -static __be32 nlm4svc_proc_unlock_msg (struct svc_rqst *rqstp,struct nlm_args *argp, -void *resp) +static __be32 nlm4svc_proc_unlock_msg (struct svc_rqst *rqstp) {dprintk ("lockd: UNLOCK_MSG called\n" ); -return nlm4svc_callback (rqstp,NLMPROC_UNLOCK_RES , argp, nlm4svc_proc_unlock); +return nlm4svc_callback (rqstp,NLMPROC_UNLOCK_RES , __nlm4svc_proc_unlock); } -static __be32 nlm4svc_proc_granted_msg (struct svc_rqst *rqstp,struct nlm_args *argp, -void *resp) +static __be32 nlm4svc_proc_granted_msg (struct svc_rqst *rqstp) {dprintk ("lockd: GRANTED_MSG called\n" ); -return nlm4svc_callback (rqstp,NLMPROC_GRANTED_RES , argp, nlm4svc_proc_granted); +return nlm4svc_callback (rqstp,NLMPROC_GRANTED_RES , __nlm4svc_proc_granted); }/* * SHARE: create a DOS share or alter existing share. */ static __be32 -nlm4svc_proc_share (struct svc_rqst *rqstp,struct nlm_args *argp, -struct nlm_res *resp) +nlm4svc_proc_share (struct svc_rqst *rqstp) { +struct nlm_args *argp = rqstp->rq_argp; +struct nlm_res *resp = rqstp->rq_resp;struct nlm_host *host;struct nlm_file *file;
@@ -345,9 +373,10 @@ nlm4svc_proc_share(struct svc_rqst *rqstp, struct nlm_args *argp,* UNSHARE: Release a DOS share. */ static __be32 -nlm4svc_proc_unshare (struct svc_rqst *rqstp,struct nlm_args *argp, -struct nlm_res *resp) +nlm4svc_proc_unshare (struct svc_rqst *rqstp) { +struct nlm_args *argp = rqstp->rq_argp; +struct nlm_res *resp = rqstp->rq_resp;struct nlm_host *host;struct nlm_file *file;
@@ -378,22 +407,23 @@ nlm4svc_proc_unshare(struct svc_rqst *rqstp, struct nlm_args *argp,* NM_LOCK: Create an unmonitored lock */ static __be32 -nlm4svc_proc_nm_lock (struct svc_rqst *rqstp,struct nlm_args *argp, -struct nlm_res *resp) +nlm4svc_proc_nm_lock (struct svc_rqst *rqstp) { +struct nlm_args *argp = rqstp->rq_argp; +dprintk ("lockd: NM_LOCK called\n" ); argp->monitor =0 ;/* just clean the monitor flag */ -return nlm4svc_proc_lock (rqstp, argp, resp); +return nlm4svc_proc_lock (rqstp); }/* * FREE_ALL: Release all locks and shares held by client */ static __be32 -nlm4svc_proc_free_all (struct svc_rqst *rqstp,struct nlm_args *argp, -void *resp) +nlm4svc_proc_free_all (struct svc_rqst *rqstp) { +struct nlm_args *argp = rqstp->rq_argp;struct nlm_host *host;/* Obtain client */
@@ -409,9 +439,10 @@ nlm4svc_proc_free_all(struct svc_rqst *rqstp, struct nlm_args *argp,* SM_NOTIFY: private callback from statd (not part of official NLM proto) */ static __be32 -nlm4svc_proc_sm_notify (struct svc_rqst *rqstp,struct nlm_reboot *argp, -void *resp) +nlm4svc_proc_sm_notify (struct svc_rqst *rqstp) { +struct nlm_reboot *argp = rqstp->rq_argp; +dprintk ("lockd: SM_NOTIFY called\n" );if (!nlm_privileged_requester (rqstp)) {
@@ -429,9 +460,10 @@ nlm4svc_proc_sm_notify(struct svc_rqst *rqstp, struct nlm_reboot *argp,* client sent a GRANTED_RES, let's remove the associated block */ static __be32 -nlm4svc_proc_granted_res (struct svc_rqst *rqstp,struct nlm_res *argp, -void *resp) +nlm4svc_proc_granted_res (struct svc_rqst *rqstp) { +struct nlm_res *argp = rqstp->rq_argp; +if (!nlmsvc_ops)return rpc_success;
@@ -463,7 +495,7 @@ nlm4svc_proc_granted_res(struct svc_rqst *rqstp, struct nlm_res *argp,struct nlm_void {int dummy; };#define PROC (name, xargt, xrest, argt, rest, respsize) \ - { .pc_func = (svc_procfunc) nlm4svc_proc_##name, \ + { .pc_func = nlm4svc_proc_##name, \ .pc_decode = (kxdrproc_t) nlm4svc_decode_##xargt, \ .pc_encode = (kxdrproc_t) nlm4svc_encode_##xrest, \ .pc_release = NULL, \
fs/lockd/svcproc.c +75 -43
264 lines not on this page · raw message
fs/nfs/callback_xdr.c +4 -3
@@ -53,7 +53,7 @@ struct callback_op {static struct callback_op callback_ops[]; -static __be32 nfs4_callback_null (struct svc_rqst *rqstp,void *argp,void *resp) +static __be32 nfs4_callback_null (struct svc_rqst *rqstp) {return htonl (NFS4_OK ); }
@@ -932,7 +932,7 @@ static __be32 process_op(int nop, struct svc_rqst *rqstp,/* * Decode, process and encode a COMPOUND */ -static __be32 nfs4_callback_compound (struct svc_rqst *rqstp,void *argp,void *resp) +static __be32 nfs4_callback_compound (struct svc_rqst *rqstp) {struct cb_compound_hdr_arg hdr_arg = {0 };struct cb_compound_hdr_res hdr_res = {NULL };
@@ -970,7 +970,8 @@ static __be32 nfs4_callback_compound(struct svc_rqst *rqstp, void *argp, void *rwhile (status ==0 && nops != hdr_arg.nops) { status =process_op (nops, rqstp, &xdr_in, - argp, &xdr_out, resp, &cps); + rqstp->rq_argp, &xdr_out, rqstp->rq_resp, + &cps); nops++; }
fs/nfsd/nfs2acl.c +14 -11
@@ -19,7 +19,7 @@* NULL call. */ static __be32 -nfsacld_proc_null (struct svc_rqst *rqstp,void *argp,void *resp) +nfsacld_proc_null (struct svc_rqst *rqstp) {return nfs_ok; }
@@ -27,9 +27,10 @@ nfsacld_proc_null(struct svc_rqst *rqstp, void *argp, void *resp)/* * Get the Access and/or Default ACL of a file. */ -static __be32 nfsacld_proc_getacl (struct svc_rqst * rqstp, -struct nfsd3_getaclargs *argp,struct nfsd3_getaclres *resp) +static __be32 nfsacld_proc_getacl (struct svc_rqst *rqstp) { +struct nfsd3_getaclargs *argp = rqstp->rq_argp; +struct nfsd3_getaclres *resp = rqstp->rq_resp;struct posix_acl *acl;struct inode *inode;svc_fh *fh;
@@ -87,10 +88,10 @@ static __be32 nfsacld_proc_getacl(struct svc_rqst * rqstp,/* * Set the Access and/or Default ACL of a file. */ -static __be32 nfsacld_proc_setacl (struct svc_rqst * rqstp, -struct nfsd3_setaclargs *argp, -struct nfsd_attrstat *resp) +static __be32 nfsacld_proc_setacl (struct svc_rqst *rqstp) { +struct nfsd3_setaclargs *argp = rqstp->rq_argp; +struct nfsd_attrstat *resp = rqstp->rq_resp;struct inode *inode;svc_fh *fh;__be32 nfserr =0 ;
@@ -141,9 +142,10 @@ static __be32 nfsacld_proc_setacl(struct svc_rqst * rqstp,/* * Check file attributes */ -static __be32 nfsacld_proc_getattr (struct svc_rqst * rqstp, -struct nfsd_fhandle *argp,struct nfsd_attrstat *resp) +static __be32 nfsacld_proc_getattr (struct svc_rqst *rqstp) { +struct nfsd_fhandle *argp = rqstp->rq_argp; +struct nfsd_attrstat *resp = rqstp->rq_resp;__be32 nfserr;dprintk ("nfsd: GETATTR %s\n" ,SVCFH_fmt (&argp->fh));
@@ -158,9 +160,10 @@ static __be32 nfsacld_proc_getattr(struct svc_rqst * rqstp,/* * Check file access */ -static __be32 nfsacld_proc_access (struct svc_rqst *rqstp,struct nfsd3_accessargs *argp, -struct nfsd3_accessres *resp) +static __be32 nfsacld_proc_access (struct svc_rqst *rqstp) { +struct nfsd3_accessargs *argp = rqstp->rq_argp; +struct nfsd3_accessres *resp = rqstp->rq_resp;__be32 nfserr; dprintk("nfsd: ACCESS(2acl) %s 0x%x\n",
@@ -347,7 +350,7 @@ struct nfsd3_voidargs { int dummy; };#define PROC (name, argt, rest, relt, cache, respsize) \ { \ - .pc_func = (svc_procfunc) nfsacld_proc_##name, \ + .pc_func = nfsacld_proc_##name, \ .pc_decode = (kxdrproc_t) nfsaclsvc_decode_##argt##args, \ .pc_encode = (kxdrproc_t) nfsaclsvc_encode_##rest##res, \ .pc_release = (kxdrproc_t) nfsaclsvc_release_##relt, \
fs/nfsd/nfs3acl.c +8 -7
@@ -18,7 +18,7 @@* NULL call. */ static __be32 -nfsd3_proc_null (struct svc_rqst *rqstp,void *argp,void *resp) +nfsd3_proc_null (struct svc_rqst *rqstp) {return nfs_ok; }
@@ -26,9 +26,10 @@ nfsd3_proc_null(struct svc_rqst *rqstp, void *argp, void *resp)/* * Get the Access and/or Default ACL of a file. */ -static __be32 nfsd3_proc_getacl (struct svc_rqst * rqstp, -struct nfsd3_getaclargs *argp,struct nfsd3_getaclres *resp) +static __be32 nfsd3_proc_getacl (struct svc_rqst *rqstp) { +struct nfsd3_getaclargs *argp = rqstp->rq_argp; +struct nfsd3_getaclres *resp = rqstp->rq_resp;struct posix_acl *acl;struct inode *inode;svc_fh *fh;
@@ -80,10 +81,10 @@ static __be32 nfsd3_proc_getacl(struct svc_rqst * rqstp,/* * Set the Access and/or Default ACL of a file. */ -static __be32 nfsd3_proc_setacl (struct svc_rqst * rqstp, -struct nfsd3_setaclargs *argp, -struct nfsd3_attrstat *resp) +static __be32 nfsd3_proc_setacl (struct svc_rqst *rqstp) { +struct nfsd3_setaclargs *argp = rqstp->rq_argp; +struct nfsd3_attrstat *resp = rqstp->rq_resp;struct inode *inode;svc_fh *fh;__be32 nfserr =0 ;
@@ -239,7 +240,7 @@ struct nfsd3_voidargs { int dummy; };#define PROC (name, argt, rest, relt, cache, respsize) \ { \ - .pc_func = (svc_procfunc) nfsd3_proc_##name, \ + .pc_func = nfsd3_proc_##name, \ .pc_decode = (kxdrproc_t) nfs3svc_decode_##argt##args, \ .pc_encode = (kxdrproc_t) nfs3svc_encode_##rest##res, \ .pc_release = (kxdrproc_t) nfs3svc_release_##relt, \
fs/nfsd/nfs3proc.c +86 -65
436 lines not on this page · raw message
fs/nfsd/nfs4proc.c +5 -4
@@ -1509,7 +1509,7 @@ nfsd4_layoutreturn(struct svc_rqst *rqstp,* NULL call. */ static __be32 -nfsd4_proc_null (struct svc_rqst *rqstp,void *argp,void *resp) +nfsd4_proc_null (struct svc_rqst *rqstp) {return nfs_ok; }
@@ -1523,6 +1523,7 @@ static inline void nfsd4_increment_op_stats(u32 opnum)typedef __be32 (*nfsd4op_func )(struct svc_rqst *,struct nfsd4_compound_state *,void *);typedef u32 (*nfsd4op_rsize )(struct svc_rqst *,struct nfsd4_op *op); +typedef void (*stateid_setter )(struct nfsd4_compound_state *,void *);typedef void (*stateid_getter )(struct nfsd4_compound_state *,void *);
@@ -1672,10 +1673,10 @@ static void svcxdr_init_encode(struct svc_rqst *rqstp,* COMPOUND call. */ static __be32 -nfsd4_proc_compound (struct svc_rqst *rqstp,void *arg,void *res) +nfsd4_proc_compound (struct svc_rqst *rqstp) { -struct nfsd4_compoundargs *args = arg; -struct nfsd4_compoundres *resp = res; +struct nfsd4_compoundargs *args = rqstp->rq_argp; +struct nfsd4_compoundres *resp = rqstp->rq_resp;struct nfsd4_op *op;struct nfsd4_operation *opdesc;struct nfsd4_compound_state *cstate = &resp->cstate;
fs/nfsd/nfsproc.c +57 -47
311 lines not on this page · raw message
fs/nfsd/nfssvc.c +1 -1
@@ -827,7 +827,7 @@ nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp) rqstp->rq_res.head[0 ].iov_len +=sizeof (__be32);/* Now call the procedure handler, and encode NFS status. */ - nfserr = proc->pc_func (rqstp, rqstp->rq_argp, rqstp->rq_resp); + nfserr = proc->pc_func (rqstp); nfserr =map_new_errors (rqstp->rq_vers, nfserr);if (nfserr == nfserr_dropit ||test_bit (RQ_DROPME , &rqstp->rq_flags)) {dprintk ("nfsd: Dropping request; may be revisited later\n" );
include/linux/sunrpc/svc.h +2 -2
@@ -419,9 +419,9 @@ struct svc_version {/* * RPC procedure info */ -typedef __be32 (*svc_procfunc )(struct svc_rqst *,void *argp,void *resp);struct svc_procedure { -svc_procfunc pc_func;/* process the request */ +/* process the request: */ +__be32 (*pc_func)(struct svc_rqst *);kxdrproc_t pc_decode;/* XDR decode args */ kxdrproc_t pc_encode;/* XDR encode result */ kxdrproc_t pc_release;/* XDR free result */
net/sunrpc/svc.c +1 -1
@@ -1223,7 +1223,7 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv)if (xdr && !xdr (rqstp, argv->iov_base, rqstp->rq_argp)) goto err_garbage; - *statp = procp->pc_func (rqstp, rqstp->rq_argp, rqstp->rq_resp); + *statp = procp->pc_func (rqstp);/* Encode reply */ if (*statp == rpc_drop_reply ||
Signature · 1 line
2.11.0
PATCH 21/32 sunrpc: properly type pc_release callbacks
In reply to Christoph HellwigDrop 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.
--- fs/nfsd/nfs2acl.c | 22 +++++++++++----------- fs/nfsd/nfs3acl.c | 8 ++++---- fs/nfsd/nfs3proc.c | 36 ++++++++++++++++++------------------ fs/nfsd/nfs3xdr.c | 16 ++++++++-------- fs/nfsd/nfs4xdr.c | 4 +--- fs/nfsd/nfsproc.c | 14 +++++++------- fs/nfsd/nfsxdr.c | 8 ++++---- fs/nfsd/xdr.h | 2 +- fs/nfsd/xdr3.h | 6 ++---- fs/nfsd/xdr4.h | 2 +- include/linux/sunrpc/svc.h | 3 ++- net/sunrpc/svc.c | 8 ++++---- 12 files changed, 63 insertions(+), 66 deletions(-)
fs/nfsd/nfs2acl.c +11 -11
@@ -318,27 +318,27 @@ static int nfsaclsvc_encode_accessres(struct svc_rqst *rqstp, __be32 *p,/* * XDR release functions */ -static int nfsaclsvc_release_getacl (struct svc_rqst *rqstp,__be32 *p, -struct nfsd3_getaclres *resp) +static void nfsaclsvc_release_getacl (struct svc_rqst *rqstp) { +struct nfsd3_getaclres *resp = rqstp->rq_resp; +fh_put (&resp->fh);posix_acl_release (resp->acl_access);posix_acl_release (resp->acl_default); -return 1 ; } -static int nfsaclsvc_release_attrstat (struct svc_rqst *rqstp,__be32 *p, -struct nfsd_attrstat *resp) +static void nfsaclsvc_release_attrstat (struct svc_rqst *rqstp) { +struct nfsd_attrstat *resp = rqstp->rq_resp; +fh_put (&resp->fh); -return 1 ; } -static int nfsaclsvc_release_access (struct svc_rqst *rqstp,__be32 *p, -struct nfsd3_accessres *resp) +static void nfsaclsvc_release_access (struct svc_rqst *rqstp) { -fh_put (&resp->fh); -return 1 ; +struct nfsd3_accessres *resp = rqstp->rq_resp; + +fh_put (&resp->fh); }#define nfsaclsvc_decode_voidargs NULL
@@ -353,7 +353,7 @@ struct nfsd3_voidargs { int dummy; }; .pc_func = nfsacld_proc_##name, \ .pc_decode = (kxdrproc_t) nfsaclsvc_decode_##argt##args, \ .pc_encode = (kxdrproc_t) nfsaclsvc_encode_##rest##res, \ - .pc_release = (kxdrproc_t) nfsaclsvc_release_##relt, \ + .pc_release = nfsaclsvc_release_##relt, \ .pc_argsize = sizeof(struct nfsd3_##argt##args), \ .pc_ressize = sizeof(struct nfsd3_##rest##res), \ .pc_cachetype = cache, \
fs/nfsd/nfs3acl.c +4 -4
@@ -223,13 +223,13 @@ static int nfs3svc_encode_setaclres(struct svc_rqst *rqstp, __be32 *p,/* * XDR release functions */ -static int nfs3svc_release_getacl (struct svc_rqst *rqstp,__be32 *p, -struct nfsd3_getaclres *resp) +static void nfs3svc_release_getacl (struct svc_rqst *rqstp) { +struct nfsd3_getaclres *resp = rqstp->rq_resp; +fh_put (&resp->fh);posix_acl_release (resp->acl_access);posix_acl_release (resp->acl_default); -return 1 ; }#define nfs3svc_decode_voidargs NULL
@@ -243,7 +243,7 @@ struct nfsd3_voidargs { int dummy; }; .pc_func = nfsd3_proc_##name, \ .pc_decode = (kxdrproc_t) nfs3svc_decode_##argt##args, \ .pc_encode = (kxdrproc_t) nfs3svc_encode_##rest##res, \ - .pc_release = (kxdrproc_t) nfs3svc_release_##relt, \ + .pc_release = nfs3svc_release_##relt, \ .pc_argsize = sizeof(struct nfsd3_##argt##args), \ .pc_ressize = sizeof(struct nfsd3_##rest##res), \ .pc_cachetype = cache, \
fs/nfsd/nfs3proc.c +18 -18
@@ -687,7 +687,7 @@ static struct svc_procedure nfsd_procedures3[22] = { .pc_func = nfsd3_proc_getattr, .pc_decode = (kxdrproc_t) nfs3svc_decode_fhandleargs, .pc_encode = (kxdrproc_t) nfs3svc_encode_attrstatres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, + .pc_release = nfs3svc_release_fhandle, .pc_argsize = sizeof(struct nfsd3_fhandleargs), .pc_ressize = sizeof(struct nfsd3_attrstatres), .pc_cachetype = RC_NOCACHE,
@@ -697,7 +697,7 @@ static struct svc_procedure nfsd_procedures3[22] = { .pc_func = nfsd3_proc_setattr, .pc_decode = (kxdrproc_t) nfs3svc_decode_sattrargs, .pc_encode = (kxdrproc_t) nfs3svc_encode_wccstatres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, + .pc_release = nfs3svc_release_fhandle, .pc_argsize = sizeof(struct nfsd3_sattrargs), .pc_ressize = sizeof(struct nfsd3_wccstatres), .pc_cachetype = RC_REPLBUFF,
@@ -707,7 +707,7 @@ static struct svc_procedure nfsd_procedures3[22] = { .pc_func = nfsd3_proc_lookup, .pc_decode = (kxdrproc_t) nfs3svc_decode_diropargs, .pc_encode = (kxdrproc_t) nfs3svc_encode_diropres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2, + .pc_release = nfs3svc_release_fhandle2, .pc_argsize = sizeof(struct nfsd3_diropargs), .pc_ressize = sizeof(struct nfsd3_diropres), .pc_cachetype = RC_NOCACHE,
@@ -717,7 +717,7 @@ static struct svc_procedure nfsd_procedures3[22] = { .pc_func = nfsd3_proc_access, .pc_decode = (kxdrproc_t) nfs3svc_decode_accessargs, .pc_encode = (kxdrproc_t) nfs3svc_encode_accessres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, + .pc_release = nfs3svc_release_fhandle, .pc_argsize = sizeof(struct nfsd3_accessargs), .pc_ressize = sizeof(struct nfsd3_accessres), .pc_cachetype = RC_NOCACHE,
@@ -727,7 +727,7 @@ static struct svc_procedure nfsd_procedures3[22] = { .pc_func = nfsd3_proc_readlink, .pc_decode = (kxdrproc_t) nfs3svc_decode_readlinkargs, .pc_encode = (kxdrproc_t) nfs3svc_encode_readlinkres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, + .pc_release = nfs3svc_release_fhandle, .pc_argsize = sizeof(struct nfsd3_readlinkargs), .pc_ressize = sizeof(struct nfsd3_readlinkres), .pc_cachetype = RC_NOCACHE,
@@ -737,7 +737,7 @@ static struct svc_procedure nfsd_procedures3[22] = { .pc_func = nfsd3_proc_read, .pc_decode = (kxdrproc_t) nfs3svc_decode_readargs, .pc_encode = (kxdrproc_t) nfs3svc_encode_readres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, + .pc_release = nfs3svc_release_fhandle, .pc_argsize = sizeof(struct nfsd3_readargs), .pc_ressize = sizeof(struct nfsd3_readres), .pc_cachetype = RC_NOCACHE,
@@ -747,7 +747,7 @@ static struct svc_procedure nfsd_procedures3[22] = { .pc_func = nfsd3_proc_write, .pc_decode = (kxdrproc_t) nfs3svc_decode_writeargs, .pc_encode = (kxdrproc_t) nfs3svc_encode_writeres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, + .pc_release = nfs3svc_release_fhandle, .pc_argsize = sizeof(struct nfsd3_writeargs), .pc_ressize = sizeof(struct nfsd3_writeres), .pc_cachetype = RC_REPLBUFF,
@@ -757,7 +757,7 @@ static struct svc_procedure nfsd_procedures3[22] = { .pc_func = nfsd3_proc_create, .pc_decode = (kxdrproc_t) nfs3svc_decode_createargs, .pc_encode = (kxdrproc_t) nfs3svc_encode_createres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2, + .pc_release = nfs3svc_release_fhandle2, .pc_argsize = sizeof(struct nfsd3_createargs), .pc_ressize = sizeof(struct nfsd3_createres), .pc_cachetype = RC_REPLBUFF,
@@ -767,7 +767,7 @@ static struct svc_procedure nfsd_procedures3[22] = { .pc_func = nfsd3_proc_mkdir, .pc_decode = (kxdrproc_t) nfs3svc_decode_mkdirargs, .pc_encode = (kxdrproc_t) nfs3svc_encode_createres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2, + .pc_release = nfs3svc_release_fhandle2, .pc_argsize = sizeof(struct nfsd3_mkdirargs), .pc_ressize = sizeof(struct nfsd3_createres), .pc_cachetype = RC_REPLBUFF,
@@ -777,7 +777,7 @@ static struct svc_procedure nfsd_procedures3[22] = { .pc_func = nfsd3_proc_symlink, .pc_decode = (kxdrproc_t) nfs3svc_decode_symlinkargs, .pc_encode = (kxdrproc_t) nfs3svc_encode_createres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2, + .pc_release = nfs3svc_release_fhandle2, .pc_argsize = sizeof(struct nfsd3_symlinkargs), .pc_ressize = sizeof(struct nfsd3_createres), .pc_cachetype = RC_REPLBUFF,
@@ -787,7 +787,7 @@ static struct svc_procedure nfsd_procedures3[22] = { .pc_func = nfsd3_proc_mknod, .pc_decode = (kxdrproc_t) nfs3svc_decode_mknodargs, .pc_encode = (kxdrproc_t) nfs3svc_encode_createres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2, + .pc_release = nfs3svc_release_fhandle2, .pc_argsize = sizeof(struct nfsd3_mknodargs), .pc_ressize = sizeof(struct nfsd3_createres), .pc_cachetype = RC_REPLBUFF,
@@ -797,7 +797,7 @@ static struct svc_procedure nfsd_procedures3[22] = { .pc_func = nfsd3_proc_remove, .pc_decode = (kxdrproc_t) nfs3svc_decode_diropargs, .pc_encode = (kxdrproc_t) nfs3svc_encode_wccstatres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, + .pc_release = nfs3svc_release_fhandle, .pc_argsize = sizeof(struct nfsd3_diropargs), .pc_ressize = sizeof(struct nfsd3_wccstatres), .pc_cachetype = RC_REPLBUFF,
@@ -807,7 +807,7 @@ static struct svc_procedure nfsd_procedures3[22] = { .pc_func = nfsd3_proc_rmdir, .pc_decode = (kxdrproc_t) nfs3svc_decode_diropargs, .pc_encode = (kxdrproc_t) nfs3svc_encode_wccstatres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, + .pc_release = nfs3svc_release_fhandle, .pc_argsize = sizeof(struct nfsd3_diropargs), .pc_ressize = sizeof(struct nfsd3_wccstatres), .pc_cachetype = RC_REPLBUFF,
@@ -817,7 +817,7 @@ static struct svc_procedure nfsd_procedures3[22] = { .pc_func = nfsd3_proc_rename, .pc_decode = (kxdrproc_t) nfs3svc_decode_renameargs, .pc_encode = (kxdrproc_t) nfs3svc_encode_renameres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2, + .pc_release = nfs3svc_release_fhandle2, .pc_argsize = sizeof(struct nfsd3_renameargs), .pc_ressize = sizeof(struct nfsd3_renameres), .pc_cachetype = RC_REPLBUFF,
@@ -827,7 +827,7 @@ static struct svc_procedure nfsd_procedures3[22] = { .pc_func = nfsd3_proc_link, .pc_decode = (kxdrproc_t) nfs3svc_decode_linkargs, .pc_encode = (kxdrproc_t) nfs3svc_encode_linkres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2, + .pc_release = nfs3svc_release_fhandle2, .pc_argsize = sizeof(struct nfsd3_linkargs), .pc_ressize = sizeof(struct nfsd3_linkres), .pc_cachetype = RC_REPLBUFF,
@@ -837,7 +837,7 @@ static struct svc_procedure nfsd_procedures3[22] = { .pc_func = nfsd3_proc_readdir, .pc_decode = (kxdrproc_t) nfs3svc_decode_readdirargs, .pc_encode = (kxdrproc_t) nfs3svc_encode_readdirres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, + .pc_release = nfs3svc_release_fhandle, .pc_argsize = sizeof(struct nfsd3_readdirargs), .pc_ressize = sizeof(struct nfsd3_readdirres), .pc_cachetype = RC_NOCACHE,
@@ -846,7 +846,7 @@ static struct svc_procedure nfsd_procedures3[22] = { .pc_func = nfsd3_proc_readdirplus, .pc_decode = (kxdrproc_t) nfs3svc_decode_readdirplusargs, .pc_encode = (kxdrproc_t) nfs3svc_encode_readdirres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, + .pc_release = nfs3svc_release_fhandle, .pc_argsize = sizeof(struct nfsd3_readdirplusargs), .pc_ressize = sizeof(struct nfsd3_readdirres), .pc_cachetype = RC_NOCACHE,
@@ -882,7 +882,7 @@ static struct svc_procedure nfsd_procedures3[22] = { .pc_func = nfsd3_proc_commit, .pc_decode = (kxdrproc_t) nfs3svc_decode_commitargs, .pc_encode = (kxdrproc_t) nfs3svc_encode_commitres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, + .pc_release = nfs3svc_release_fhandle, .pc_argsize = sizeof(struct nfsd3_commitargs), .pc_ressize = sizeof(struct nfsd3_commitres), .pc_cachetype = RC_NOCACHE,
fs/nfsd/nfs3xdr.c +8 -8
@@ -1103,19 +1103,19 @@ nfs3svc_encode_commitres(struct svc_rqst *rqstp, __be32 *p,/* * XDR release functions */ -int -nfs3svc_release_fhandle (struct svc_rqst *rqstp,__be32 *p, -struct nfsd3_attrstat *resp) +void +nfs3svc_release_fhandle (struct svc_rqst *rqstp) { +struct nfsd3_attrstat *resp = rqstp->rq_resp; +fh_put (&resp->fh); -return 1 ; } -int -nfs3svc_release_fhandle2 (struct svc_rqst *rqstp,__be32 *p, -struct nfsd3_fhandle_pair *resp) +void +nfs3svc_release_fhandle2 (struct svc_rqst *rqstp) { +struct nfsd3_fhandle_pair *resp = rqstp->rq_resp; +fh_put (&resp->fh1);fh_put (&resp->fh2); -return 1 ; }
fs/nfsd/nfs4xdr.c +1 -3
@@ -4538,9 +4538,8 @@ nfs4svc_encode_voidres(struct svc_rqst *rqstp, __be32 *p, void *dummy)return xdr_ressize_check (rqstp, p); } -int nfsd4_release_compoundargs (void *rq,__be32 *p,void *resp) +void nfsd4_release_compoundargs (struct svc_rqst *rqstp) { -struct svc_rqst *rqstp = rq;struct nfsd4_compoundargs *args = rqstp->rq_argp;if (args->ops != args->iops) {
@@ -4554,7 +4553,6 @@ int nfsd4_release_compoundargs(void *rq, __be32 *p, void *resp) args->to_free = tb->next;kfree (tb); } -return 1 ; }int
fs/nfsd/nfsproc.c +7 -7
@@ -587,7 +587,7 @@ static struct svc_procedure nfsd_procedures2[18] = { .pc_func = nfsd_proc_getattr, .pc_decode = (kxdrproc_t) nfssvc_decode_fhandle, .pc_encode = (kxdrproc_t) nfssvc_encode_attrstat, - .pc_release = (kxdrproc_t) nfssvc_release_fhandle, + .pc_release = nfssvc_release_fhandle, .pc_argsize = sizeof(struct nfsd_fhandle), .pc_ressize = sizeof(struct nfsd_attrstat), .pc_cachetype = RC_NOCACHE,
@@ -597,7 +597,7 @@ static struct svc_procedure nfsd_procedures2[18] = { .pc_func = nfsd_proc_setattr, .pc_decode = (kxdrproc_t) nfssvc_decode_sattrargs, .pc_encode = (kxdrproc_t) nfssvc_encode_attrstat, - .pc_release = (kxdrproc_t) nfssvc_release_fhandle, + .pc_release = nfssvc_release_fhandle, .pc_argsize = sizeof(struct nfsd_sattrargs), .pc_ressize = sizeof(struct nfsd_attrstat), .pc_cachetype = RC_REPLBUFF,
@@ -615,7 +615,7 @@ static struct svc_procedure nfsd_procedures2[18] = { .pc_func = nfsd_proc_lookup, .pc_decode = (kxdrproc_t) nfssvc_decode_diropargs, .pc_encode = (kxdrproc_t) nfssvc_encode_diropres, - .pc_release = (kxdrproc_t) nfssvc_release_fhandle, + .pc_release = nfssvc_release_fhandle, .pc_argsize = sizeof(struct nfsd_diropargs), .pc_ressize = sizeof(struct nfsd_diropres), .pc_cachetype = RC_NOCACHE,
@@ -634,7 +634,7 @@ static struct svc_procedure nfsd_procedures2[18] = { .pc_func = nfsd_proc_read, .pc_decode = (kxdrproc_t) nfssvc_decode_readargs, .pc_encode = (kxdrproc_t) nfssvc_encode_readres, - .pc_release = (kxdrproc_t) nfssvc_release_fhandle, + .pc_release = nfssvc_release_fhandle, .pc_argsize = sizeof(struct nfsd_readargs), .pc_ressize = sizeof(struct nfsd_readres), .pc_cachetype = RC_NOCACHE,
@@ -652,7 +652,7 @@ static struct svc_procedure nfsd_procedures2[18] = { .pc_func = nfsd_proc_write, .pc_decode = (kxdrproc_t) nfssvc_decode_writeargs, .pc_encode = (kxdrproc_t) nfssvc_encode_attrstat, - .pc_release = (kxdrproc_t) nfssvc_release_fhandle, + .pc_release = nfssvc_release_fhandle, .pc_argsize = sizeof(struct nfsd_writeargs), .pc_ressize = sizeof(struct nfsd_attrstat), .pc_cachetype = RC_REPLBUFF,
@@ -662,7 +662,7 @@ static struct svc_procedure nfsd_procedures2[18] = { .pc_func = nfsd_proc_create, .pc_decode = (kxdrproc_t) nfssvc_decode_createargs, .pc_encode = (kxdrproc_t) nfssvc_encode_diropres, - .pc_release = (kxdrproc_t) nfssvc_release_fhandle, + .pc_release = nfssvc_release_fhandle, .pc_argsize = sizeof(struct nfsd_createargs), .pc_ressize = sizeof(struct nfsd_diropres), .pc_cachetype = RC_REPLBUFF,
@@ -708,7 +708,7 @@ static struct svc_procedure nfsd_procedures2[18] = { .pc_func = nfsd_proc_mkdir, .pc_decode = (kxdrproc_t) nfssvc_decode_createargs, .pc_encode = (kxdrproc_t) nfssvc_encode_diropres, - .pc_release = (kxdrproc_t) nfssvc_release_fhandle, + .pc_release = nfssvc_release_fhandle, .pc_argsize = sizeof(struct nfsd_createargs), .pc_ressize = sizeof(struct nfsd_diropres), .pc_cachetype = RC_REPLBUFF,
fs/nfsd/nfsxdr.c +4 -4
@@ -543,10 +543,10 @@ nfssvc_encode_entry(void *ccdv, const char *name,/* * XDR release functions */ -int -nfssvc_release_fhandle (struct svc_rqst *rqstp,__be32 *p, -struct nfsd_fhandle *resp) +void +nfssvc_release_fhandle (struct svc_rqst *rqstp) { +struct nfsd_fhandle *resp = rqstp->rq_resp; +fh_put (&resp->fh); -return 1 ; }
fs/nfsd/xdr.h +1 -1
@@ -164,7 +164,7 @@ int nfssvc_encode_readdirres(struct svc_rqst *, __be32 *, struct nfsd_readdirresint nfssvc_encode_entry (void *,const char *name,int namlen,loff_t offset,u64 ino,unsigned int ); -int nfssvc_release_fhandle (struct svc_rqst *,__be32 *,struct nfsd_fhandle *); +void nfssvc_release_fhandle (struct svc_rqst *);/* Helper functions for NFSv2 ACL code */ __be32 *nfs2svc_encode_fattr (struct svc_rqst *rqstp,__be32 *p,struct svc_fh *fhp,struct kstat *stat);
fs/nfsd/xdr3.h +2 -4
@@ -330,10 +330,8 @@ int nfs3svc_encode_pathconfres(struct svc_rqst *, __be32 *,int nfs3svc_encode_commitres (struct svc_rqst *,__be32 *,struct nfsd3_commitres *); -int nfs3svc_release_fhandle (struct svc_rqst *,__be32 *, -struct nfsd3_attrstat *); -int nfs3svc_release_fhandle2 (struct svc_rqst *,__be32 *, -struct nfsd3_fhandle_pair *); +void nfs3svc_release_fhandle (struct svc_rqst *); +void nfs3svc_release_fhandle2 (struct svc_rqst *);int nfs3svc_encode_entry (void *,const char *name,int namlen,loff_t offset,u64 ino,unsigned int );
fs/nfsd/xdr4.h +1 -1
@@ -743,7 +743,7 @@ extern __be32 nfsd4_release_lockowner(struct svc_rqst *rqstp, struct nfsd4_compound_state *, struct nfsd4_release_lockowner *rlockowner); -extern int nfsd4_release_compoundargs (void *rq,__be32 *p,void *resp); +extern void nfsd4_release_compoundargs (struct svc_rqst *rqstp);extern __be32 nfsd4_delegreturn (struct svc_rqst *rqstp,struct nfsd4_compound_state *,struct nfsd4_delegreturn *dr); extern __be32 nfsd4_renew(struct svc_rqst *rqstp,
include/linux/sunrpc/svc.h +2 -1
@@ -424,7 +424,8 @@ struct svc_procedure {__be32 (*pc_func)(struct svc_rqst *);kxdrproc_t pc_decode;/* XDR decode args */ kxdrproc_t pc_encode;/* XDR encode result */ -kxdrproc_t pc_release;/* XDR free result */ +/* XDR free result: */ +void (*pc_release)(struct svc_rqst *);unsigned int pc_argsize;/* argument struct size */ unsigned int pc_ressize;/* result struct size */ unsigned int pc_count;/* call count */
net/sunrpc/svc.c +4 -4
@@ -1229,12 +1229,12 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv)if (*statp == rpc_drop_reply ||test_bit (RQ_DROPME , &rqstp->rq_flags)) {if (procp->pc_release) - procp->pc_release (rqstp,NULL , rqstp->rq_resp); + procp->pc_release (rqstp); goto dropit; }if (*statp == rpc_autherr_badcred) {if (procp->pc_release) - procp->pc_release (rqstp,NULL , rqstp->rq_resp); + procp->pc_release (rqstp); goto err_bad_auth; } if (*statp == rpc_success &&
@@ -1249,7 +1249,7 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv)if (!versp->vs_dispatch (rqstp, statp)) {/* Release reply info */ if (procp->pc_release) - procp->pc_release (rqstp,NULL , rqstp->rq_resp); + procp->pc_release (rqstp); goto dropit; } }
@@ -1260,7 +1260,7 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv)/* Release reply info */ if (procp->pc_release) - procp->pc_release (rqstp,NULL , rqstp->rq_resp); + procp->pc_release (rqstp);if (procp->pc_encode ==NULL ) goto dropit;
Signature · 1 line
2.11.0
PATCH 22/32 sunrpc: properly type pc_decode callbacks
In reply to Christoph HellwigDrop the argp 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.
--- fs/lockd/svc4proc.c | 2 +- fs/lockd/svcproc.c | 2 +- fs/lockd/xdr.c | 29 ++++++++++++------ fs/lockd/xdr4.c | 29 ++++++++++++------ fs/nfs/callback_xdr.c | 4 +-- fs/nfsd/nfs2acl.c | 21 +++++++------ fs/nfsd/nfs3acl.c | 11 +++---- fs/nfsd/nfs3proc.c | 42 +++++++++++++------------- fs/nfsd/nfs3xdr.c | 74 +++++++++++++++++++++++++++------------------- fs/nfsd/nfs4proc.c | 2 +- fs/nfsd/nfs4xdr.c | 4 ++- fs/nfsd/nfsproc.c | 36 +++++++++++----------- fs/nfsd/nfssvc.c | 5 ++-- fs/nfsd/nfsxdr.c | 53 ++++++++++++++++++++------------- fs/nfsd/xdr.h | 34 ++++++++------------- fs/nfsd/xdr3.h | 47 ++++++++++------------------- fs/nfsd/xdr4.h | 3 +- include/linux/lockd/xdr.h | 18 +++++------ include/linux/lockd/xdr4.h | 18 +++++------ include/linux/sunrpc/svc.h | 3 +- net/sunrpc/svc.c | 9 ++++-- 21 files changed, 237 insertions(+), 209 deletions(-)
fs/lockd/svc4proc.c +1 -1
@@ -496,7 +496,7 @@ struct nlm_void { int dummy; };#define PROC (name, xargt, xrest, argt, rest, respsize) \ { .pc_func = nlm4svc_proc_##name, \ - .pc_decode = (kxdrproc_t) nlm4svc_decode_##xargt, \ + .pc_decode = nlm4svc_decode_##xargt, \ .pc_encode = (kxdrproc_t) nlm4svc_encode_##xrest, \ .pc_release = NULL, \ .pc_argsize = sizeof(struct nlm_##argt), \
fs/lockd/svcproc.c +1 -1
@@ -538,7 +538,7 @@ struct nlm_void { int dummy; };#define PROC (name, xargt, xrest, argt, rest, respsize) \ { .pc_func = nlmsvc_proc_##name, \ - .pc_decode = (kxdrproc_t) nlmsvc_decode_##xargt, \ + .pc_decode = nlmsvc_decode_##xargt, \ .pc_encode = (kxdrproc_t) nlmsvc_encode_##xrest, \ .pc_release = NULL, \ .pc_argsize = sizeof(struct nlm_##argt), \
fs/lockd/xdr.c +20 -9
@@ -182,8 +182,9 @@ nlm_encode_testres(__be32 *p, struct nlm_res *resp)* First, the server side XDR functions */ int -nlmsvc_decode_testargs (struct svc_rqst *rqstp,__be32 *p,nlm_args *argp) +nlmsvc_decode_testargs (struct svc_rqst *rqstp,__be32 *p) { +struct nlm_args *argp = rqstp->rq_argp;u32 exclusive;if (!(p =nlm_decode_cookie (p, &argp->cookie)))
@@ -207,8 +208,9 @@ nlmsvc_encode_testres(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp) }int -nlmsvc_decode_lockargs (struct svc_rqst *rqstp,__be32 *p,nlm_args *argp) +nlmsvc_decode_lockargs (struct svc_rqst *rqstp,__be32 *p) { +struct nlm_args *argp = rqstp->rq_argp;u32 exclusive;if (!(p =nlm_decode_cookie (p, &argp->cookie)))
@@ -227,8 +229,9 @@ nlmsvc_decode_lockargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) }int -nlmsvc_decode_cancargs (struct svc_rqst *rqstp,__be32 *p,nlm_args *argp) +nlmsvc_decode_cancargs (struct svc_rqst *rqstp,__be32 *p) { +struct nlm_args *argp = rqstp->rq_argp;u32 exclusive;if (!(p =nlm_decode_cookie (p, &argp->cookie)))
@@ -243,8 +246,10 @@ nlmsvc_decode_cancargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) }int -nlmsvc_decode_unlockargs (struct svc_rqst *rqstp,__be32 *p,nlm_args *argp) +nlmsvc_decode_unlockargs (struct svc_rqst *rqstp,__be32 *p) { +struct nlm_args *argp = rqstp->rq_argp; +if (!(p =nlm_decode_cookie (p, &argp->cookie)) || !(p =nlm_decode_lock (p, &argp->lock)))return 0 ;
@@ -253,8 +258,9 @@ nlmsvc_decode_unlockargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) }int -nlmsvc_decode_shareargs (struct svc_rqst *rqstp,__be32 *p,nlm_args *argp) +nlmsvc_decode_shareargs (struct svc_rqst *rqstp,__be32 *p) { +struct nlm_args *argp = rqstp->rq_argp;struct nlm_lock *lock = &argp->lock;memset (lock,0 ,sizeof (*lock));
@@ -293,8 +299,9 @@ nlmsvc_encode_res(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp) } int -nlmsvc_decode_notify(struct svc_rqst *rqstp, __be32 *p, struct nlm_args *argp) +nlmsvc_decode_notify(struct svc_rqst *rqstp, __be32 *p) { + struct nlm_args *argp = rqstp->rq_argp; struct nlm_lock *lock = &argp->lock; if (!(p = xdr_decode_string_inplace(p, &lock->caller,
@@ -305,8 +312,10 @@ nlmsvc_decode_notify(struct svc_rqst *rqstp, __be32 *p, struct nlm_args *argp) }int -nlmsvc_decode_reboot (struct svc_rqst *rqstp,__be32 *p,struct nlm_reboot *argp) +nlmsvc_decode_reboot (struct svc_rqst *rqstp,__be32 *p) { +struct nlm_reboot *argp = rqstp->rq_argp; +if (!(p =xdr_decode_string_inplace (p, &argp->mon, &argp->len,SM_MAXSTRLEN )))return 0 ; argp->state =ntohl (*p++);
@@ -316,8 +325,10 @@ nlmsvc_decode_reboot(struct svc_rqst *rqstp, __be32 *p, struct nlm_reboot *argp) }int -nlmsvc_decode_res (struct svc_rqst *rqstp,__be32 *p,struct nlm_res *resp) +nlmsvc_decode_res (struct svc_rqst *rqstp,__be32 *p) { +struct nlm_res *resp = rqstp->rq_argp; +if (!(p =nlm_decode_cookie (p, &resp->cookie)))return 0 ; resp->status = *p++;
@@ -325,7 +336,7 @@ nlmsvc_decode_res(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp) }int -nlmsvc_decode_void (struct svc_rqst *rqstp,__be32 *p,void *dummy) +nlmsvc_decode_void (struct svc_rqst *rqstp,__be32 *p) {return xdr_argsize_check (rqstp, p); }
fs/lockd/xdr4.c +20 -9
@@ -179,8 +179,9 @@ nlm4_encode_testres(__be32 *p, struct nlm_res *resp)* First, the server side XDR functions */ int -nlm4svc_decode_testargs (struct svc_rqst *rqstp,__be32 *p,nlm_args *argp) +nlm4svc_decode_testargs (struct svc_rqst *rqstp,__be32 *p) { +struct nlm_args *argp = rqstp->rq_argp;u32 exclusive;if (!(p =nlm4_decode_cookie (p, &argp->cookie)))
@@ -204,8 +205,9 @@ nlm4svc_encode_testres(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp) }int -nlm4svc_decode_lockargs (struct svc_rqst *rqstp,__be32 *p,nlm_args *argp) +nlm4svc_decode_lockargs (struct svc_rqst *rqstp,__be32 *p) { +struct nlm_args *argp = rqstp->rq_argp;u32 exclusive;if (!(p =nlm4_decode_cookie (p, &argp->cookie)))
@@ -224,8 +226,9 @@ nlm4svc_decode_lockargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) }int -nlm4svc_decode_cancargs (struct svc_rqst *rqstp,__be32 *p,nlm_args *argp) +nlm4svc_decode_cancargs (struct svc_rqst *rqstp,__be32 *p) { +struct nlm_args *argp = rqstp->rq_argp;u32 exclusive;if (!(p =nlm4_decode_cookie (p, &argp->cookie)))
@@ -240,8 +243,10 @@ nlm4svc_decode_cancargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) }int -nlm4svc_decode_unlockargs (struct svc_rqst *rqstp,__be32 *p,nlm_args *argp) +nlm4svc_decode_unlockargs (struct svc_rqst *rqstp,__be32 *p) { +struct nlm_args *argp = rqstp->rq_argp; +if (!(p =nlm4_decode_cookie (p, &argp->cookie)) || !(p =nlm4_decode_lock (p, &argp->lock)))return 0 ;
@@ -250,8 +255,9 @@ nlm4svc_decode_unlockargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) }int -nlm4svc_decode_shareargs (struct svc_rqst *rqstp,__be32 *p,nlm_args *argp) +nlm4svc_decode_shareargs (struct svc_rqst *rqstp,__be32 *p) { +struct nlm_args *argp = rqstp->rq_argp;struct nlm_lock *lock = &argp->lock;memset (lock,0 ,sizeof (*lock));
@@ -290,8 +296,9 @@ nlm4svc_encode_res(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp) } int -nlm4svc_decode_notify(struct svc_rqst *rqstp, __be32 *p, struct nlm_args *argp) +nlm4svc_decode_notify(struct svc_rqst *rqstp, __be32 *p) { + struct nlm_args *argp = rqstp->rq_argp; struct nlm_lock *lock = &argp->lock; if (!(p = xdr_decode_string_inplace(p, &lock->caller,
@@ -302,8 +309,10 @@ nlm4svc_decode_notify(struct svc_rqst *rqstp, __be32 *p, struct nlm_args *argp) }int -nlm4svc_decode_reboot (struct svc_rqst *rqstp,__be32 *p,struct nlm_reboot *argp) +nlm4svc_decode_reboot (struct svc_rqst *rqstp,__be32 *p) { +struct nlm_reboot *argp = rqstp->rq_argp; +if (!(p =xdr_decode_string_inplace (p, &argp->mon, &argp->len,SM_MAXSTRLEN )))return 0 ; argp->state =ntohl (*p++);
@@ -313,8 +322,10 @@ nlm4svc_decode_reboot(struct svc_rqst *rqstp, __be32 *p, struct nlm_reboot *argp }int -nlm4svc_decode_res (struct svc_rqst *rqstp,__be32 *p,struct nlm_res *resp) +nlm4svc_decode_res (struct svc_rqst *rqstp,__be32 *p) { +struct nlm_res *resp = rqstp->rq_argp; +if (!(p =nlm4_decode_cookie (p, &resp->cookie)))return 0 ; resp->status = *p++;
@@ -322,7 +333,7 @@ nlm4svc_decode_res(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp) }int -nlm4svc_decode_void (struct svc_rqst *rqstp,__be32 *p,void *dummy) +nlm4svc_decode_void (struct svc_rqst *rqstp,__be32 *p) {return xdr_argsize_check (rqstp, p); }
fs/nfs/callback_xdr.c +2 -2
@@ -58,7 +58,7 @@ static __be32 nfs4_callback_null(struct svc_rqst *rqstp)return htonl (NFS4_OK ); } -static int nfs4_decode_void (struct svc_rqst *rqstp,__be32 *p,void *dummy) +static int nfs4_decode_void (struct svc_rqst *rqstp,__be32 *p) {return xdr_argsize_check (rqstp, p); }
@@ -1053,7 +1053,7 @@ static struct callback_op callback_ops[] = {static struct svc_procedure nfs4_callback_procedures1[] = { [CB_NULL ] = { .pc_func = nfs4_callback_null, - .pc_decode = (kxdrproc_t )nfs4_decode_void, + .pc_decode = nfs4_decode_void, .pc_encode = (kxdrproc_t )nfs4_encode_void, .pc_xdrressize =1 , },
fs/nfsd/nfs2acl.c +12 -9
@@ -182,9 +182,10 @@ static __be32 nfsacld_proc_access(struct svc_rqst *rqstp)/* * XDR decode functions */ -static int nfsaclsvc_decode_getaclargs (struct svc_rqst *rqstp,__be32 *p, -struct nfsd3_getaclargs *argp) +static int nfsaclsvc_decode_getaclargs (struct svc_rqst *rqstp,__be32 *p) { +struct nfsd3_getaclargs *argp = rqstp->rq_argp; + p =nfs2svc_decode_fh (p, &argp->fh);if (!p)return 0 ;
@@ -194,9 +195,9 @@ static int nfsaclsvc_decode_getaclargs(struct svc_rqst *rqstp, __be32 *p, } -static int nfsaclsvc_decode_setaclargs (struct svc_rqst *rqstp,__be32 *p, -struct nfsd3_setaclargs *argp) +static int nfsaclsvc_decode_setaclargs (struct svc_rqst *rqstp,__be32 *p) { +struct nfsd3_setaclargs *argp = rqstp->rq_argp;struct kvec *head = rqstp->rq_arg.head;unsigned int base;int n;
@@ -220,18 +221,20 @@ static int nfsaclsvc_decode_setaclargs(struct svc_rqst *rqstp, __be32 *p,return (n >0 ); } -static int nfsaclsvc_decode_fhandleargs (struct svc_rqst *rqstp,__be32 *p, -struct nfsd_fhandle *argp) +static int nfsaclsvc_decode_fhandleargs (struct svc_rqst *rqstp,__be32 *p) { +struct nfsd_fhandle *argp = rqstp->rq_argp; + p =nfs2svc_decode_fh (p, &argp->fh);if (!p)return 0 ;return xdr_argsize_check (rqstp, p); } -static int nfsaclsvc_decode_accessargs (struct svc_rqst *rqstp,__be32 *p, -struct nfsd3_accessargs *argp) +static int nfsaclsvc_decode_accessargs (struct svc_rqst *rqstp,__be32 *p) { +struct nfsd3_accessargs *argp = rqstp->rq_argp; + p =nfs2svc_decode_fh (p, &argp->fh);if (!p)return 0 ;
@@ -351,7 +354,7 @@ struct nfsd3_voidargs { int dummy; };#define PROC (name, argt, rest, relt, cache, respsize) \ { \ .pc_func = nfsacld_proc_##name, \ - .pc_decode = (kxdrproc_t) nfsaclsvc_decode_##argt##args, \ + .pc_decode = nfsaclsvc_decode_##argt##args, \ .pc_encode = (kxdrproc_t) nfsaclsvc_encode_##rest##res, \ .pc_release = nfsaclsvc_release_##relt, \ .pc_argsize = sizeof(struct nfsd3_##argt##args), \
fs/nfsd/nfs3acl.c +6 -5
@@ -124,9 +124,10 @@ static __be32 nfsd3_proc_setacl(struct svc_rqst *rqstp)/* * XDR decode functions */ -static int nfs3svc_decode_getaclargs (struct svc_rqst *rqstp,__be32 *p, -struct nfsd3_getaclargs *args) +static int nfs3svc_decode_getaclargs (struct svc_rqst *rqstp,__be32 *p) { +struct nfsd3_getaclargs *args = rqstp->rq_argp; + p =nfs3svc_decode_fh (p, &args->fh);if (!p)return 0 ;
@@ -136,9 +137,9 @@ static int nfs3svc_decode_getaclargs(struct svc_rqst *rqstp, __be32 *p, } -static int nfs3svc_decode_setaclargs (struct svc_rqst *rqstp,__be32 *p, -struct nfsd3_setaclargs *args) +static int nfs3svc_decode_setaclargs (struct svc_rqst *rqstp,__be32 *p) { +struct nfsd3_setaclargs *args = rqstp->rq_argp;struct kvec *head = rqstp->rq_arg.head;unsigned int base;int n;
@@ -241,7 +242,7 @@ struct nfsd3_voidargs { int dummy; };#define PROC (name, argt, rest, relt, cache, respsize) \ { \ .pc_func = nfsd3_proc_##name, \ - .pc_decode = (kxdrproc_t) nfs3svc_decode_##argt##args, \ + .pc_decode = nfs3svc_decode_##argt##args, \ .pc_encode = (kxdrproc_t) nfs3svc_encode_##rest##res, \ .pc_release = nfs3svc_release_##relt, \ .pc_argsize = sizeof(struct nfsd3_##argt##args), \
fs/nfsd/nfs3proc.c +21 -21
168 lines not on this page · raw message
fs/nfsd/nfs3xdr.c +43 -31
187 lines not on this page · raw message
fs/nfsd/nfs4proc.c +1 -1
@@ -2527,7 +2527,7 @@ static struct svc_procedure nfsd_procedures4[2] = { }, [NFSPROC4_COMPOUND] = { .pc_func = nfsd4_proc_compound, - .pc_decode = (kxdrproc_t) nfs4svc_decode_compoundargs, + .pc_decode = nfs4svc_decode_compoundargs, .pc_encode = (kxdrproc_t) nfs4svc_encode_compoundres, .pc_argsize = sizeof(struct nfsd4_compoundargs), .pc_ressize = sizeof(struct nfsd4_compoundres),
fs/nfsd/nfs4xdr.c +3 -1
@@ -4556,8 +4556,10 @@ void nfsd4_release_compoundargs(struct svc_rqst *rqstp) }int -nfs4svc_decode_compoundargs (struct svc_rqst *rqstp,__be32 *p,struct nfsd4_compoundargs *args) +nfs4svc_decode_compoundargs (struct svc_rqst *rqstp,__be32 *p) { +struct nfsd4_compoundargs *args = rqstp->rq_argp; +if (rqstp->rq_arg.head[0 ].iov_len %4 ) {/* client is nuts */ dprintk("%s: compound not properly padded! (peeraddr=%pISc xid=0x%x)",
fs/nfsd/nfsproc.c +18 -18
@@ -576,7 +576,7 @@ struct nfsd_void { int dummy; };static struct svc_procedure nfsd_procedures2[18 ] = { [NFSPROC_NULL ] = { .pc_func = nfsd_proc_null, - .pc_decode = (kxdrproc_t ) nfssvc_decode_void, + .pc_decode = nfssvc_decode_void, .pc_encode = (kxdrproc_t ) nfssvc_encode_void, .pc_argsize =sizeof (struct nfsd_void ), .pc_ressize =sizeof (struct nfsd_void ),
@@ -585,7 +585,7 @@ static struct svc_procedure nfsd_procedures2[18] = { }, [NFSPROC_GETATTR] = { .pc_func = nfsd_proc_getattr, - .pc_decode = (kxdrproc_t) nfssvc_decode_fhandle, + .pc_decode = nfssvc_decode_fhandle, .pc_encode = (kxdrproc_t) nfssvc_encode_attrstat, .pc_release = nfssvc_release_fhandle, .pc_argsize = sizeof(struct nfsd_fhandle),
@@ -595,7 +595,7 @@ static struct svc_procedure nfsd_procedures2[18] = { }, [NFSPROC_SETATTR] = { .pc_func = nfsd_proc_setattr, - .pc_decode = (kxdrproc_t) nfssvc_decode_sattrargs, + .pc_decode = nfssvc_decode_sattrargs, .pc_encode = (kxdrproc_t) nfssvc_encode_attrstat, .pc_release = nfssvc_release_fhandle, .pc_argsize = sizeof(struct nfsd_sattrargs),
@@ -604,7 +604,7 @@ static struct svc_procedure nfsd_procedures2[18] = { .pc_xdrressize = ST+AT, }, [NFSPROC_ROOT] = { - .pc_decode = (kxdrproc_t) nfssvc_decode_void, + .pc_decode = nfssvc_decode_void, .pc_encode = (kxdrproc_t) nfssvc_encode_void, .pc_argsize = sizeof(struct nfsd_void), .pc_ressize = sizeof(struct nfsd_void),
@@ -613,7 +613,7 @@ static struct svc_procedure nfsd_procedures2[18] = { }, [NFSPROC_LOOKUP] = { .pc_func = nfsd_proc_lookup, - .pc_decode = (kxdrproc_t) nfssvc_decode_diropargs, + .pc_decode = nfssvc_decode_diropargs, .pc_encode = (kxdrproc_t) nfssvc_encode_diropres, .pc_release = nfssvc_release_fhandle, .pc_argsize = sizeof(struct nfsd_diropargs),
@@ -623,7 +623,7 @@ static struct svc_procedure nfsd_procedures2[18] = { }, [NFSPROC_READLINK] = { .pc_func = nfsd_proc_readlink, - .pc_decode = (kxdrproc_t) nfssvc_decode_readlinkargs, + .pc_decode = nfssvc_decode_readlinkargs, .pc_encode = (kxdrproc_t) nfssvc_encode_readlinkres, .pc_argsize = sizeof(struct nfsd_readlinkargs), .pc_ressize = sizeof(struct nfsd_readlinkres),
@@ -632,7 +632,7 @@ static struct svc_procedure nfsd_procedures2[18] = { }, [NFSPROC_READ] = { .pc_func = nfsd_proc_read, - .pc_decode = (kxdrproc_t) nfssvc_decode_readargs, + .pc_decode = nfssvc_decode_readargs, .pc_encode = (kxdrproc_t) nfssvc_encode_readres, .pc_release = nfssvc_release_fhandle, .pc_argsize = sizeof(struct nfsd_readargs),
@@ -641,7 +641,7 @@ static struct svc_procedure nfsd_procedures2[18] = { .pc_xdrressize = ST+AT+1+NFSSVC_MAXBLKSIZE_V2/4, }, [NFSPROC_WRITECACHE] = { - .pc_decode = (kxdrproc_t) nfssvc_decode_void, + .pc_decode = nfssvc_decode_void, .pc_encode = (kxdrproc_t) nfssvc_encode_void, .pc_argsize = sizeof(struct nfsd_void), .pc_ressize = sizeof(struct nfsd_void),
@@ -650,7 +650,7 @@ static struct svc_procedure nfsd_procedures2[18] = { }, [NFSPROC_WRITE] = { .pc_func = nfsd_proc_write, - .pc_decode = (kxdrproc_t) nfssvc_decode_writeargs, + .pc_decode = nfssvc_decode_writeargs, .pc_encode = (kxdrproc_t) nfssvc_encode_attrstat, .pc_release = nfssvc_release_fhandle, .pc_argsize = sizeof(struct nfsd_writeargs),
@@ -660,7 +660,7 @@ static struct svc_procedure nfsd_procedures2[18] = { }, [NFSPROC_CREATE] = { .pc_func = nfsd_proc_create, - .pc_decode = (kxdrproc_t) nfssvc_decode_createargs, + .pc_decode = nfssvc_decode_createargs, .pc_encode = (kxdrproc_t) nfssvc_encode_diropres, .pc_release = nfssvc_release_fhandle, .pc_argsize = sizeof(struct nfsd_createargs),
@@ -670,7 +670,7 @@ static struct svc_procedure nfsd_procedures2[18] = { }, [NFSPROC_REMOVE] = { .pc_func = nfsd_proc_remove, - .pc_decode = (kxdrproc_t) nfssvc_decode_diropargs, + .pc_decode = nfssvc_decode_diropargs, .pc_encode = (kxdrproc_t) nfssvc_encode_void, .pc_argsize = sizeof(struct nfsd_diropargs), .pc_ressize = sizeof(struct nfsd_void),
@@ -679,7 +679,7 @@ static struct svc_procedure nfsd_procedures2[18] = { }, [NFSPROC_RENAME] = { .pc_func = nfsd_proc_rename, - .pc_decode = (kxdrproc_t) nfssvc_decode_renameargs, + .pc_decode = nfssvc_decode_renameargs, .pc_encode = (kxdrproc_t) nfssvc_encode_void, .pc_argsize = sizeof(struct nfsd_renameargs), .pc_ressize = sizeof(struct nfsd_void),
@@ -688,7 +688,7 @@ static struct svc_procedure nfsd_procedures2[18] = { }, [NFSPROC_LINK] = { .pc_func = nfsd_proc_link, - .pc_decode = (kxdrproc_t) nfssvc_decode_linkargs, + .pc_decode = nfssvc_decode_linkargs, .pc_encode = (kxdrproc_t) nfssvc_encode_void, .pc_argsize = sizeof(struct nfsd_linkargs), .pc_ressize = sizeof(struct nfsd_void),
@@ -697,7 +697,7 @@ static struct svc_procedure nfsd_procedures2[18] = { }, [NFSPROC_SYMLINK] = { .pc_func = nfsd_proc_symlink, - .pc_decode = (kxdrproc_t) nfssvc_decode_symlinkargs, + .pc_decode = nfssvc_decode_symlinkargs, .pc_encode = (kxdrproc_t) nfssvc_encode_void, .pc_argsize = sizeof(struct nfsd_symlinkargs), .pc_ressize = sizeof(struct nfsd_void),
@@ -706,7 +706,7 @@ static struct svc_procedure nfsd_procedures2[18] = { }, [NFSPROC_MKDIR] = { .pc_func = nfsd_proc_mkdir, - .pc_decode = (kxdrproc_t) nfssvc_decode_createargs, + .pc_decode = nfssvc_decode_createargs, .pc_encode = (kxdrproc_t) nfssvc_encode_diropres, .pc_release = nfssvc_release_fhandle, .pc_argsize = sizeof(struct nfsd_createargs),
@@ -716,7 +716,7 @@ static struct svc_procedure nfsd_procedures2[18] = { }, [NFSPROC_RMDIR] = { .pc_func = nfsd_proc_rmdir, - .pc_decode = (kxdrproc_t) nfssvc_decode_diropargs, + .pc_decode = nfssvc_decode_diropargs, .pc_encode = (kxdrproc_t) nfssvc_encode_void, .pc_argsize = sizeof(struct nfsd_diropargs), .pc_ressize = sizeof(struct nfsd_void),
@@ -725,7 +725,7 @@ static struct svc_procedure nfsd_procedures2[18] = { }, [NFSPROC_READDIR] = { .pc_func = nfsd_proc_readdir, - .pc_decode = (kxdrproc_t) nfssvc_decode_readdirargs, + .pc_decode = nfssvc_decode_readdirargs, .pc_encode = (kxdrproc_t) nfssvc_encode_readdirres, .pc_argsize = sizeof(struct nfsd_readdirargs), .pc_ressize = sizeof(struct nfsd_readdirres),
@@ -733,7 +733,7 @@ static struct svc_procedure nfsd_procedures2[18] = { }, [NFSPROC_STATFS] = { .pc_func = nfsd_proc_statfs, - .pc_decode = (kxdrproc_t) nfssvc_decode_fhandle, + .pc_decode = nfssvc_decode_fhandle, .pc_encode = (kxdrproc_t) nfssvc_encode_statfsres, .pc_argsize = sizeof(struct nfsd_fhandle), .pc_ressize = sizeof(struct nfsd_statfsres),
fs/nfsd/nfssvc.c +2 -3
@@ -801,9 +801,8 @@ nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp)*/ rqstp->rq_cachetype = proc->pc_cachetype;/* Decode arguments */ - xdr = proc->pc_decode; -if (xdr && !xdr (rqstp, (__be32 *)rqstp->rq_arg.head[0 ].iov_base, - rqstp->rq_argp)) { +if (proc->pc_decode && + !proc->pc_decode (rqstp, (__be32 *)rqstp->rq_arg.head[0 ].iov_base)) {dprintk ("nfsd: failed to decode arguments!\n" ); *statp = rpc_garbage_args;return 1 ;
fs/nfsd/nfsxdr.c +32 -21
135 lines not on this page · raw message
fs/nfsd/xdr.h +12 -22
@@ -131,28 +131,18 @@ union nfsd_xdrstore {#define NFS2_SVC_XDRSIZE sizeof(union nfsd_xdrstore) -int nfssvc_decode_void (struct svc_rqst *,__be32 *,void *); -int nfssvc_decode_fhandle (struct svc_rqst *,__be32 *,struct nfsd_fhandle *); -int nfssvc_decode_sattrargs (struct svc_rqst *,__be32 *, -struct nfsd_sattrargs *); -int nfssvc_decode_diropargs (struct svc_rqst *,__be32 *, -struct nfsd_diropargs *); -int nfssvc_decode_readargs (struct svc_rqst *,__be32 *, -struct nfsd_readargs *); -int nfssvc_decode_writeargs (struct svc_rqst *,__be32 *, -struct nfsd_writeargs *); -int nfssvc_decode_createargs (struct svc_rqst *,__be32 *, -struct nfsd_createargs *); -int nfssvc_decode_renameargs (struct svc_rqst *,__be32 *, -struct nfsd_renameargs *); -int nfssvc_decode_readlinkargs (struct svc_rqst *,__be32 *, -struct nfsd_readlinkargs *); -int nfssvc_decode_linkargs (struct svc_rqst *,__be32 *, -struct nfsd_linkargs *); -int nfssvc_decode_symlinkargs (struct svc_rqst *,__be32 *, -struct nfsd_symlinkargs *); -int nfssvc_decode_readdirargs (struct svc_rqst *,__be32 *, -struct nfsd_readdirargs *); +int nfssvc_decode_void (struct svc_rqst *,__be32 *); +int nfssvc_decode_fhandle (struct svc_rqst *,__be32 *); +int nfssvc_decode_sattrargs (struct svc_rqst *,__be32 *); +int nfssvc_decode_diropargs (struct svc_rqst *,__be32 *); +int nfssvc_decode_readargs (struct svc_rqst *,__be32 *); +int nfssvc_decode_writeargs (struct svc_rqst *,__be32 *); +int nfssvc_decode_createargs (struct svc_rqst *,__be32 *); +int nfssvc_decode_renameargs (struct svc_rqst *,__be32 *); +int nfssvc_decode_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 *);
fs/nfsd/xdr3.h +16 -31
53 lines not on this page · raw message
fs/nfsd/xdr4.h +1 -2
@@ -683,8 +683,7 @@ set_change_info(struct nfsd4_change_info *cinfo, struct svc_fh *fhp)bool nfsd4_mach_creds_match (struct nfs4_client *cl,struct svc_rqst *rqstp);int nfs4svc_encode_voidres (struct svc_rqst *,__be32 *,void *); -int nfs4svc_decode_compoundargs (struct svc_rqst *,__be32 *, -struct nfsd4_compoundargs *); +int nfs4svc_decode_compoundargs (struct svc_rqst *,__be32 *);int nfs4svc_encode_compoundres (struct svc_rqst *,__be32 *,struct nfsd4_compoundres *);__be32 nfsd4_check_resp_size (struct nfsd4_compoundres *,u32 );
include/linux/lockd/xdr.h +9 -9
@@ -95,19 +95,19 @@ struct nlm_reboot {*/ #define NLMSVC_XDRSIZE sizeof(struct nlm_args) -int nlmsvc_decode_testargs (struct svc_rqst *,__be32 *,struct nlm_args *); +int nlmsvc_decode_testargs (struct svc_rqst *,__be32 *);int nlmsvc_encode_testres (struct svc_rqst *,__be32 *,struct nlm_res *); -int nlmsvc_decode_lockargs (struct svc_rqst *,__be32 *,struct nlm_args *); -int nlmsvc_decode_cancargs (struct svc_rqst *,__be32 *,struct nlm_args *); -int nlmsvc_decode_unlockargs (struct svc_rqst *,__be32 *,struct nlm_args *); +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_decode_res (struct svc_rqst *,__be32 *,struct nlm_res *); +int nlmsvc_decode_res (struct svc_rqst *,__be32 *);int nlmsvc_encode_void (struct svc_rqst *,__be32 *,void *); -int nlmsvc_decode_void (struct svc_rqst *,__be32 *,void *); -int nlmsvc_decode_shareargs (struct svc_rqst *,__be32 *,struct nlm_args *); +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_decode_notify (struct svc_rqst *,__be32 *,struct nlm_args *); -int nlmsvc_decode_reboot (struct svc_rqst *,__be32 *,struct nlm_reboot *); +int nlmsvc_decode_notify (struct svc_rqst *,__be32 *); +int nlmsvc_decode_reboot (struct svc_rqst *,__be32 *);/* int nlmclt_encode_testargs(struct rpc_rqst *, u32 *, struct nlm_args *); int nlmclt_encode_lockargs(struct rpc_rqst *, u32 *, struct nlm_args *);
include/linux/lockd/xdr4.h +9 -9
@@ -23,19 +23,19 @@ -int nlm4svc_decode_testargs (struct svc_rqst *,__be32 *,struct nlm_args *); +int nlm4svc_decode_testargs (struct svc_rqst *,__be32 *);int nlm4svc_encode_testres (struct svc_rqst *,__be32 *,struct nlm_res *); -int nlm4svc_decode_lockargs (struct svc_rqst *,__be32 *,struct nlm_args *); -int nlm4svc_decode_cancargs (struct svc_rqst *,__be32 *,struct nlm_args *); -int nlm4svc_decode_unlockargs (struct svc_rqst *,__be32 *,struct nlm_args *); +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_decode_res (struct svc_rqst *,__be32 *,struct nlm_res *); +int nlm4svc_decode_res (struct svc_rqst *,__be32 *);int nlm4svc_encode_void (struct svc_rqst *,__be32 *,void *); -int nlm4svc_decode_void (struct svc_rqst *,__be32 *,void *); -int nlm4svc_decode_shareargs (struct svc_rqst *,__be32 *,struct nlm_args *); +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_decode_notify (struct svc_rqst *,__be32 *,struct nlm_args *); -int nlm4svc_decode_reboot (struct svc_rqst *,__be32 *,struct nlm_reboot *); +int nlm4svc_decode_notify (struct svc_rqst *,__be32 *); +int nlm4svc_decode_reboot (struct svc_rqst *,__be32 *);/* int nlmclt_encode_testargs(struct rpc_rqst *, u32 *, struct nlm_args *); int nlmclt_encode_lockargs(struct rpc_rqst *, u32 *, struct nlm_args *);
include/linux/sunrpc/svc.h +2 -1
@@ -422,7 +422,8 @@ struct svc_version {struct svc_procedure {/* process the request: */ __be32 (*pc_func)(struct svc_rqst *); -kxdrproc_t pc_decode;/* XDR decode args */ +/* XDR decode args: */ +int (*pc_decode)(struct svc_rqst *,__be32 *data);kxdrproc_t pc_encode;/* XDR encode result */ /* XDR free result: */ void (*pc_release)(struct svc_rqst *);
net/sunrpc/svc.c +6 -3
@@ -1218,9 +1218,12 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv)/* Call the function that processes the request. */ if (!versp->vs_dispatch) { -/* Decode arguments */ - xdr = procp->pc_decode; -if (xdr && !xdr (rqstp, argv->iov_base, rqstp->rq_argp)) +/* +* Decode arguments +* XXX: why do we ignore the return value? +*/ +if (procp->pc_decode && + !procp->pc_decode (rqstp, argv->iov_base)) goto err_garbage; *statp = procp->pc_func (rqstp);
Signature · 1 line
2.11.0
PATCH 23/32 sunrpc: properly type pc_encode callbacks
In reply to Christoph HellwigDrop 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.
--- fs/lockd/svc4proc.c | 2 +- fs/lockd/svcproc.c | 2 +- fs/lockd/xdr.c | 14 ++++++--- fs/lockd/xdr4.c | 14 ++++++--- fs/nfs/callback_xdr.c | 6 ++-- fs/nfsd/nfs2acl.c | 18 ++++++----- fs/nfsd/nfs3acl.c | 11 +++---- fs/nfsd/nfs3proc.c | 44 +++++++++++++-------------- fs/nfsd/nfs3xdr.c | 74 +++++++++++++++++++++++++++------------------- fs/nfsd/nfs4proc.c | 4 +-- fs/nfsd/nfs4xdr.c | 5 ++-- fs/nfsd/nfsproc.c | 36 +++++++++++----------- fs/nfsd/nfssvc.c | 5 +--- fs/nfsd/nfsxdr.c | 31 +++++++++++-------- fs/nfsd/xdr.h | 14 ++++----- fs/nfsd/xdr3.h | 45 ++++++++++------------------ fs/nfsd/xdr4.h | 5 ++-- include/linux/lockd/xdr.h | 8 ++--- include/linux/lockd/xdr4.h | 8 ++--- include/linux/sunrpc/svc.h | 3 +- net/sunrpc/svc.c | 6 ++-- 21 files changed, 185 insertions(+), 170 deletions(-)
fs/lockd/svc4proc.c +1 -1
@@ -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), \
fs/lockd/svcproc.c +1 -1
@@ -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), \
fs/lockd/xdr.c +10 -4
@@ -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); }
fs/lockd/xdr4.c +10 -4
@@ -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); }
fs/nfs/callback_xdr.c +3 -3
@@ -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); }
@@ -1054,12 +1054,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,
fs/nfsd/nfs2acl.c +10 -8
@@ -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), \
fs/nfsd/nfs3acl.c +6 -5
@@ -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), \
fs/nfsd/nfs3proc.c +22 -22
176 lines not on this page · raw message
fs/nfsd/nfs3xdr.c +43 -31
185 lines not on this page · raw message
fs/nfsd/nfs4proc.c +2 -2
@@ -2519,7 +2519,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 ,
@@ -2528,7 +2528,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,
fs/nfsd/nfs4xdr.c +3 -2
@@ -4533,7 +4533,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); }
@@ -4579,11 +4579,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 +
fs/nfsd/nfsproc.c +18 -18
@@ -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,
fs/nfsd/nfssvc.c +1 -4
@@ -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 );
fs/nfsd/nfsxdr.c +18 -13
@@ -422,32 +422,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;
@@ -461,9 +464,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);
@@ -480,9 +484,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 */
@@ -493,9 +498,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 */
fs/nfsd/xdr.h +7 -7
@@ -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 );
fs/nfsd/xdr3.h +16 -29
51 lines not on this page · raw message
fs/nfsd/xdr4.h +2 -3
@@ -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);
include/linux/lockd/xdr.h +4 -4
@@ -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 *);/*
include/linux/lockd/xdr4.h +4 -4
@@ -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 *);/*
include/linux/sunrpc/svc.h +2 -1
@@ -424,7 +424,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 */
net/sunrpc/svc.c +2 -4
@@ -1096,7 +1096,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;
@@ -1240,9 +1239,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;
Signature · 1 line
2.11.0
Re: [PATCH 23/32] sunrpc: properly type pc_encode callbacks
T24gVHVlLCAyMDE3LTA1LTA5IGF0IDExOjIwICswMjAwLCBDaHJpc3RvcGggSGVsbHdpZyB3cm90 ZToNCj4gRHJvcCB0aGUgcmVzcCBhcmd1bWVudCBhcyBpdCBjYW4gdHJpdmlhbGx5IGJlIGRlcml2 ZWQgZnJvbSB0aGUgcnFzdHANCj4gYXJndW1lbnQuwqDCoFdpdGggdGhhdCBhbGwgZnVuY3Rpb25z IG5vdyBoYXZlIHRoZSBzYW1lIHByb3RvdHlwZSwgYW5kDQo+IHdlDQo+IGNhbiByZW1vdmUgdGhl IHVuc2FmZSBjYXN0aW5nIHRvIGt4ZHJwcm9jX3QuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBDaHJp c3RvcGggSGVsbHdpZyA8aGNoQGxzdC5kZT4NCj4gLS0tDQo+IMKgZnMvbG9ja2Qvc3ZjNHByb2Mu Y8KgwqDCoMKgwqDCoMKgwqB8wqDCoDIgKy0NCj4gwqBmcy9sb2NrZC9zdmNwcm9jLmPCoMKgwqDC oMKgwqDCoMKgwqB8wqDCoDIgKy0NCj4gwqBmcy9sb2NrZC94ZHIuY8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgfCAxNCArKysrKystLS0NCj4gwqBmcy9sb2NrZC94ZHI0LmPCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB8IDE0ICsrKysrKy0tLQ0KPiDCoGZzL25mcy9jYWxsYmFja194ZHIuY8KgwqDC oMKgwqDCoHzCoMKgNiArKy0tDQo+IMKgZnMvbmZzZC9uZnMyYWNsLmPCoMKgwqDCoMKgwqDCoMKg wqDCoHwgMTggKysrKysrLS0tLS0NCj4gwqBmcy9uZnNkL25mczNhY2wuY8KgwqDCoMKgwqDCoMKg wqDCoMKgfCAxMSArKystLS0tDQo+IMKgZnMvbmZzZC9uZnMzcHJvYy5jwqDCoMKgwqDCoMKgwqDC oMKgfCA0NCArKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0NCj4gwqBmcy9uZnNkL25mczN4ZHIu Y8KgwqDCoMKgwqDCoMKgwqDCoMKgfCA3NCArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0t LS0tLS0NCj4gLS0tLS0tLS0tLQ0KPiDCoGZzL25mc2QvbmZzNHByb2MuY8KgwqDCoMKgwqDCoMKg wqDCoHzCoMKgNCArLS0NCj4gwqBmcy9uZnNkL25mczR4ZHIuY8KgwqDCoMKgwqDCoMKgwqDCoMKg fMKgwqA1ICsrLS0NCj4gwqBmcy9uZnNkL25mc3Byb2MuY8KgwqDCoMKgwqDCoMKgwqDCoMKgfCAz NiArKysrKysrKysrKy0tLS0tLS0tLS0tDQo+IMKgZnMvbmZzZC9uZnNzdmMuY8KgwqDCoMKgwqDC oMKgwqDCoMKgwqB8wqDCoDUgKy0tLQ0KPiDCoGZzL25mc2QvbmZzeGRyLmPCoMKgwqDCoMKgwqDC oMKgwqDCoMKgfCAzMSArKysrKysrKysrKy0tLS0tLS0tDQo+IMKgZnMvbmZzZC94ZHIuaMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8IDE0ICsrKystLS0tLQ0KPiDCoGZzL25mc2QveGRyMy5o wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8IDQ1ICsrKysrKysrKystLS0tLS0tLS0tLS0tLS0t LS0NCj4gwqBmcy9uZnNkL3hkcjQuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqA1ICsr LS0NCj4gwqBpbmNsdWRlL2xpbnV4L2xvY2tkL3hkci5owqDCoHzCoMKgOCArKy0tLQ0KPiDCoGlu Y2x1ZGUvbGludXgvbG9ja2QveGRyNC5oIHzCoMKgOCArKy0tLQ0KPiDCoGluY2x1ZGUvbGludXgv c3VucnBjL3N2Yy5oIHzCoMKgMyArLQ0KPiDCoG5ldC9zdW5ycGMvc3ZjLmPCoMKgwqDCoMKgwqDC oMKgwqDCoMKgfMKgwqA2ICsrLS0NCj4gwqAyMSBmaWxlcyBjaGFuZ2VkLCAxODUgaW5zZXJ0aW9u cygrKSwgMTcwIGRlbGV0aW9ucygtKQ0KPiANCg0KQWNrZWQtYnk6IFRyb25kIE15a2xlYnVzdCA8 dHJvbmQubXlrbGVidXN0QHByaW1hcnlkYXRhLmNvbT4NCg0KLS0gDQpUcm9uZCBNeWtsZWJ1c3QN CkxpbnV4IE5GUyBjbGllbnQgbWFpbnRhaW5lciwgUHJpbWFyeURhdGENCnRyb25kLm15a2xlYnVz dEBwcmltYXJ5ZGF0YS5jb20NCg0KTGludXggTkZTIGNsaWVudCBtYWludGFpbmVyLCBQcmltYXJ5 RGF0YQ0KdHJvbmQubXlrbGVidXN0QHByaW1hcnlkYXRhLmNvbQ0K
PATCH 24/32 sunrpc: remove kxdrproc_t
In reply to Christoph HellwigRemove the now unused typedef.
--- include/linux/sunrpc/xdr.h | 7 ------- 1 file changed, 7 deletions(-)
include/linux/sunrpc/xdr.h +0 -7
@@ -35,13 +35,6 @@ struct xdr_netobj { };/* -* This is the legacy generic XDR function. rqstp is either a rpc_rqst -* (client side) or svc_rqst pointer (server side). -* Encode functions always assume there's enough room in the buffer. -*/ -typedef int (*kxdrproc_t )(void *rqstp,__be32 *data,void *obj); - -/* * Basic structure for transmission/reception of a client XDR message. * Features a header (for a linear buffer containing RPC headers * and the data payload for short messages), and then an array of
Signature · 1 line
2.11.0
PATCH 25/32 nfsd4: properly type op_set_currentstateid callbacks
In reply to Christoph HellwigGiven the args union in struct nfsd4_op a name, and pass it to the op_set_currentstateid callbacks instead of using unsafe function pointer casts.
--- fs/nfsd/current_stateid.h | 12 ++++++++---- fs/nfsd/nfs4proc.c | 12 ++++++------ fs/nfsd/nfs4state.c | 20 ++++++++++++-------- fs/nfsd/xdr4.h | 2 +- 4 files changed, 27 insertions(+), 19 deletions(-)
fs/nfsd/current_stateid.h +8 -4
@@ -8,10 +8,14 @@ extern void clear_current_stateid(struct nfsd4_compound_state *cstate);/* * functions to set current state id */ -extern void nfsd4_set_opendowngradestateid (struct nfsd4_compound_state *cstate,struct nfsd4_open_downgrade *); -extern void nfsd4_set_openstateid (struct nfsd4_compound_state *,struct nfsd4_open *); -extern void nfsd4_set_lockstateid (struct nfsd4_compound_state *,struct nfsd4_lock *); -extern void nfsd4_set_closestateid (struct nfsd4_compound_state *,struct nfsd4_close *); +extern void nfsd4_set_opendowngradestateid (struct nfsd4_compound_state *, +union nfsd4_op_u *); +extern void nfsd4_set_openstateid (struct nfsd4_compound_state *, +union nfsd4_op_u *); +extern void nfsd4_set_lockstateid (struct nfsd4_compound_state *, +union nfsd4_op_u *); +extern void nfsd4_set_closestateid (struct nfsd4_compound_state *, +union nfsd4_op_u *);/* * functions to consume current state id
fs/nfsd/nfs4proc.c +6 -6
@@ -1524,7 +1524,6 @@ typedef __be32(*nfsd4op_func)(struct svc_rqst *, struct nfsd4_compound_state *, void *);typedef u32 (*nfsd4op_rsize )(struct svc_rqst *,struct nfsd4_op *op); -typedef void (*stateid_setter )(struct nfsd4_compound_state *,void *);typedef void (*stateid_getter )(struct nfsd4_compound_state *,void *);enum nfsd4_op_flags {
@@ -1564,7 +1563,8 @@ struct nfsd4_operation {/* Try to get response size before operation */ nfsd4op_rsize op_rsize_bop;stateid_getter op_get_currentstateid; -stateid_setter op_set_currentstateid; +void (*op_set_currentstateid)(struct nfsd4_compound_state *, +union nfsd4_op_u *); };static struct nfsd4_operation nfsd4_ops[];
@@ -2104,7 +2104,7 @@ static struct nfsd4_operation nfsd4_ops[] = { .op_name = "OP_CLOSE", .op_rsize_bop = (nfsd4op_rsize)nfsd4_status_stateid_rsize, .op_get_currentstateid = (stateid_getter)nfsd4_get_closestateid, - .op_set_currentstateid = (stateid_setter)nfsd4_set_closestateid, + .op_set_currentstateid = nfsd4_set_closestateid, }, [OP_COMMIT] = { .op_func = (nfsd4op_func)nfsd4_commit,
@@ -2148,7 +2148,7 @@ static struct nfsd4_operation nfsd4_ops[] = { .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_LOCK", .op_rsize_bop = (nfsd4op_rsize)nfsd4_lock_rsize, - .op_set_currentstateid = (stateid_setter)nfsd4_set_lockstateid, + .op_set_currentstateid = nfsd4_set_lockstateid, }, [OP_LOCKT] = { .op_func = (nfsd4op_func)nfsd4_lockt,
@@ -2184,7 +2184,7 @@ static struct nfsd4_operation nfsd4_ops[] = { .op_flags = OP_HANDLES_WRONGSEC | OP_MODIFIES_SOMETHING, .op_name = "OP_OPEN", .op_rsize_bop = (nfsd4op_rsize)nfsd4_open_rsize, - .op_set_currentstateid = (stateid_setter)nfsd4_set_openstateid, + .op_set_currentstateid = nfsd4_set_openstateid, }, [OP_OPEN_CONFIRM] = { .op_func = (nfsd4op_func)nfsd4_open_confirm,
@@ -2198,7 +2198,7 @@ static struct nfsd4_operation nfsd4_ops[] = { .op_name = "OP_OPEN_DOWNGRADE", .op_rsize_bop = (nfsd4op_rsize)nfsd4_status_stateid_rsize, .op_get_currentstateid = (stateid_getter)nfsd4_get_opendowngradestateid, - .op_set_currentstateid = (stateid_setter)nfsd4_set_opendowngradestateid, + .op_set_currentstateid = nfsd4_set_opendowngradestateid, }, [OP_PUTFH] = { .op_func = (nfsd4op_func)nfsd4_putfh,
fs/nfsd/nfs4state.c +12 -8
@@ -7116,27 +7116,31 @@ clear_current_stateid(struct nfsd4_compound_state *cstate)* functions to set current state id */ void -nfsd4_set_opendowngradestateid (struct nfsd4_compound_state *cstate,struct nfsd4_open_downgrade *odp) +nfsd4_set_opendowngradestateid (struct nfsd4_compound_state *cstate, +union nfsd4_op_u *u) { -put_stateid (cstate, &odp->od_stateid); +put_stateid (cstate, &u->open_downgrade.od_stateid); }void -nfsd4_set_openstateid (struct nfsd4_compound_state *cstate,struct nfsd4_open *open) +nfsd4_set_openstateid (struct nfsd4_compound_state *cstate, +union nfsd4_op_u *u) { -put_stateid (cstate, &open->op_stateid); +put_stateid (cstate, &u->open.op_stateid); }void -nfsd4_set_closestateid (struct nfsd4_compound_state *cstate,struct nfsd4_close *close) +nfsd4_set_closestateid (struct nfsd4_compound_state *cstate, +union nfsd4_op_u *u) { -put_stateid (cstate, &close->cl_stateid); +put_stateid (cstate, &u->close.cl_stateid); }void -nfsd4_set_lockstateid (struct nfsd4_compound_state *cstate,struct nfsd4_lock *lock) +nfsd4_set_lockstateid (struct nfsd4_compound_state *cstate, +union nfsd4_op_u *u) { -put_stateid (cstate, &lock->lk_resp_stateid); +put_stateid (cstate, &u->lock.lk_resp_stateid); }/*
fs/nfsd/xdr4.h +1 -1
@@ -539,7 +539,7 @@ struct nfsd4_seek {struct nfsd4_op {int opnum;__be32 status; -union { +union nfsd4_op_u {struct nfsd4_access access;struct nfsd4_close close;struct nfsd4_commit commit;
Signature · 1 line
2.11.0
PATCH 26/32 nfsd4: properly type op_get_currentstateid callbacks
In reply to Christoph HellwigPass union nfsd4_op_u to the op_set_currentstateid callbacks instead of using unsafe function pointer casts.
--- fs/nfsd/current_stateid.h | 24 ++++++++++++++++-------- fs/nfsd/nfs4proc.c | 21 ++++++++++----------- fs/nfsd/nfs4state.c | 40 ++++++++++++++++++++++++---------------- 3 files changed, 50 insertions(+), 35 deletions(-)
fs/nfsd/current_stateid.h +16 -8
@@ -20,13 +20,21 @@ extern void nfsd4_set_closestateid(struct nfsd4_compound_state *,/* * functions to consume current state id */ -extern void nfsd4_get_opendowngradestateid (struct nfsd4_compound_state *cstate,struct nfsd4_open_downgrade *); -extern void nfsd4_get_delegreturnstateid (struct nfsd4_compound_state *,struct nfsd4_delegreturn *); -extern void nfsd4_get_freestateid (struct nfsd4_compound_state *,struct nfsd4_free_stateid *); -extern void nfsd4_get_setattrstateid (struct nfsd4_compound_state *,struct nfsd4_setattr *); -extern void nfsd4_get_closestateid (struct nfsd4_compound_state *,struct nfsd4_close *); -extern void nfsd4_get_lockustateid (struct nfsd4_compound_state *,struct nfsd4_locku *); -extern void nfsd4_get_readstateid (struct nfsd4_compound_state *,struct nfsd4_read *); -extern void nfsd4_get_writestateid (struct nfsd4_compound_state *,struct nfsd4_write *); +extern void nfsd4_get_opendowngradestateid (struct nfsd4_compound_state *, +union nfsd4_op_u *); +extern void nfsd4_get_delegreturnstateid (struct nfsd4_compound_state *, +union nfsd4_op_u *); +extern void nfsd4_get_freestateid (struct nfsd4_compound_state *, +union nfsd4_op_u *); +extern void nfsd4_get_setattrstateid (struct nfsd4_compound_state *, +union nfsd4_op_u *); +extern void nfsd4_get_closestateid (struct nfsd4_compound_state *, +union nfsd4_op_u *); +extern void nfsd4_get_lockustateid (struct nfsd4_compound_state *, +union nfsd4_op_u *); +extern void nfsd4_get_readstateid (struct nfsd4_compound_state *, +union nfsd4_op_u *); +extern void nfsd4_get_writestateid (struct nfsd4_compound_state *, +union nfsd4_op_u *);#endif /* _NFSD4_CURRENT_STATE_H */
fs/nfsd/nfs4proc.c +10 -11
@@ -1524,8 +1524,6 @@ typedef __be32(*nfsd4op_func)(struct svc_rqst *, struct nfsd4_compound_state *, void *);typedef u32 (*nfsd4op_rsize )(struct svc_rqst *,struct nfsd4_op *op); -typedef void (*stateid_getter )(struct nfsd4_compound_state *,void *); -enum nfsd4_op_flags {ALLOWED_WITHOUT_FH =1 <<0 ,/* No current filehandle required */ ALLOWED_ON_ABSENT_FS =1 <<1 ,/* ops processed on absent fs */
@@ -1562,7 +1560,8 @@ struct nfsd4_operation {char *op_name;/* Try to get response size before operation */ nfsd4op_rsize op_rsize_bop; -stateid_getter op_get_currentstateid; +void (*op_get_currentstateid)(struct nfsd4_compound_state *, +union nfsd4_op_u *);void (*op_set_currentstateid)(struct nfsd4_compound_state *,union nfsd4_op_u *); };
@@ -2103,7 +2102,7 @@ static struct nfsd4_operation nfsd4_ops[] = { .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_CLOSE", .op_rsize_bop = (nfsd4op_rsize)nfsd4_status_stateid_rsize, - .op_get_currentstateid = (stateid_getter)nfsd4_get_closestateid, + .op_get_currentstateid = nfsd4_get_closestateid, .op_set_currentstateid = nfsd4_set_closestateid, }, [OP_COMMIT] = {
@@ -2123,7 +2122,7 @@ static struct nfsd4_operation nfsd4_ops[] = { .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_DELEGRETURN", .op_rsize_bop = nfsd4_only_status_rsize, - .op_get_currentstateid = (stateid_getter)nfsd4_get_delegreturnstateid, + .op_get_currentstateid = nfsd4_get_delegreturnstateid, }, [OP_GETATTR] = { .op_func = (nfsd4op_func)nfsd4_getattr,
@@ -2160,7 +2159,7 @@ static struct nfsd4_operation nfsd4_ops[] = { .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_LOCKU", .op_rsize_bop = (nfsd4op_rsize)nfsd4_status_stateid_rsize, - .op_get_currentstateid = (stateid_getter)nfsd4_get_lockustateid, + .op_get_currentstateid = nfsd4_get_lockustateid, }, [OP_LOOKUP] = { .op_func = (nfsd4op_func)nfsd4_lookup,
@@ -2197,7 +2196,7 @@ static struct nfsd4_operation nfsd4_ops[] = { .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_OPEN_DOWNGRADE", .op_rsize_bop = (nfsd4op_rsize)nfsd4_status_stateid_rsize, - .op_get_currentstateid = (stateid_getter)nfsd4_get_opendowngradestateid, + .op_get_currentstateid = nfsd4_get_opendowngradestateid, .op_set_currentstateid = nfsd4_set_opendowngradestateid, }, [OP_PUTFH] = {
@@ -2225,7 +2224,7 @@ static struct nfsd4_operation nfsd4_ops[] = { .op_func = (nfsd4op_func)nfsd4_read, .op_name = "OP_READ", .op_rsize_bop = (nfsd4op_rsize)nfsd4_read_rsize, - .op_get_currentstateid = (stateid_getter)nfsd4_get_readstateid, + .op_get_currentstateid = nfsd4_get_readstateid, }, [OP_READDIR] = { .op_func = (nfsd4op_func)nfsd4_readdir,
@@ -2281,7 +2280,7 @@ static struct nfsd4_operation nfsd4_ops[] = { .op_name = "OP_SETATTR", .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, .op_rsize_bop = (nfsd4op_rsize)nfsd4_setattr_rsize, - .op_get_currentstateid = (stateid_getter)nfsd4_get_setattrstateid, + .op_get_currentstateid = nfsd4_get_setattrstateid, }, [OP_SETCLIENTID] = { .op_func = (nfsd4op_func)nfsd4_setclientid,
@@ -2307,7 +2306,7 @@ static struct nfsd4_operation nfsd4_ops[] = { .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_WRITE", .op_rsize_bop = (nfsd4op_rsize)nfsd4_write_rsize, - .op_get_currentstateid = (stateid_getter)nfsd4_get_writestateid, + .op_get_currentstateid = nfsd4_get_writestateid, }, [OP_RELEASE_LOCKOWNER] = { .op_func = (nfsd4op_func)nfsd4_release_lockowner,
@@ -2387,7 +2386,7 @@ static struct nfsd4_operation nfsd4_ops[] = { .op_func = (nfsd4op_func)nfsd4_free_stateid, .op_flags = ALLOWED_WITHOUT_FH | OP_MODIFIES_SOMETHING, .op_name = "OP_FREE_STATEID", - .op_get_currentstateid = (stateid_getter)nfsd4_get_freestateid, + .op_get_currentstateid = nfsd4_get_freestateid, .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, },#ifdef CONFIG_NFSD_PNFS
fs/nfsd/nfs4state.c +24 -16
@@ -7148,49 +7148,57 @@ nfsd4_set_lockstateid(struct nfsd4_compound_state *cstate,*/ void -nfsd4_get_opendowngradestateid (struct nfsd4_compound_state *cstate,struct nfsd4_open_downgrade *odp) +nfsd4_get_opendowngradestateid (struct nfsd4_compound_state *cstate, +union nfsd4_op_u *u) { -get_stateid (cstate, &odp->od_stateid); +get_stateid (cstate, &u->open_downgrade.od_stateid); }void -nfsd4_get_delegreturnstateid (struct nfsd4_compound_state *cstate,struct nfsd4_delegreturn *drp) +nfsd4_get_delegreturnstateid (struct nfsd4_compound_state *cstate, +union nfsd4_op_u *u) { -get_stateid (cstate, &drp->dr_stateid); +get_stateid (cstate, &u->delegreturn.dr_stateid); }void -nfsd4_get_freestateid (struct nfsd4_compound_state *cstate,struct nfsd4_free_stateid *fsp) +nfsd4_get_freestateid (struct nfsd4_compound_state *cstate, +union nfsd4_op_u *u) { -get_stateid (cstate, &fsp->fr_stateid); +get_stateid (cstate, &u->free_stateid.fr_stateid); }void -nfsd4_get_setattrstateid (struct nfsd4_compound_state *cstate,struct nfsd4_setattr *setattr) +nfsd4_get_setattrstateid (struct nfsd4_compound_state *cstate, +union nfsd4_op_u *u) { -get_stateid (cstate, &setattr->sa_stateid); +get_stateid (cstate, &u->setattr.sa_stateid); }void -nfsd4_get_closestateid (struct nfsd4_compound_state *cstate,struct nfsd4_close *close) +nfsd4_get_closestateid (struct nfsd4_compound_state *cstate, +union nfsd4_op_u *u) { -get_stateid (cstate, &close->cl_stateid); +get_stateid (cstate, &u->close.cl_stateid); }void -nfsd4_get_lockustateid (struct nfsd4_compound_state *cstate,struct nfsd4_locku *locku) +nfsd4_get_lockustateid (struct nfsd4_compound_state *cstate, +union nfsd4_op_u *u) { -get_stateid (cstate, &locku->lu_stateid); +get_stateid (cstate, &u->locku.lu_stateid); }void -nfsd4_get_readstateid (struct nfsd4_compound_state *cstate,struct nfsd4_read *read) +nfsd4_get_readstateid (struct nfsd4_compound_state *cstate, +union nfsd4_op_u *u) { -get_stateid (cstate, &read->rd_stateid); +get_stateid (cstate, &u->read.rd_stateid); }void -nfsd4_get_writestateid (struct nfsd4_compound_state *cstate,struct nfsd4_write *write) +nfsd4_get_writestateid (struct nfsd4_compound_state *cstate, +union nfsd4_op_u *u) { -get_stateid (cstate, &write->wr_stateid); +get_stateid (cstate, &u->write.wr_stateid); }
Signature · 1 line
2.11.0
PATCH 27/32 nfsd4: remove nfsd4op_rsize
In reply to Christoph HellwigExcept for a lot of unnecessary casts this typedef only has one user, so remove the casts and expand it in struct nfsd4_operation.
--- fs/nfsd/nfs4proc.c | 109 ++++++++++++++++++++++++++--------------------------- 1 file changed, 54 insertions(+), 55 deletions(-)
fs/nfsd/nfs4proc.c +54 -55
@@ -1522,7 +1522,6 @@ static inline void nfsd4_increment_op_stats(u32 opnum)typedef __be32 (*nfsd4op_func )(struct svc_rqst *,struct nfsd4_compound_state *,void *); -typedef u32 (*nfsd4op_rsize )(struct svc_rqst *,struct nfsd4_op *op);enum nfsd4_op_flags {ALLOWED_WITHOUT_FH =1 <<0 ,/* No current filehandle required */
@@ -1559,7 +1558,7 @@ struct nfsd4_operation {u32 op_flags;char *op_name;/* Try to get response size before operation */ -nfsd4op_rsize op_rsize_bop; +u32 (*op_rsize_bop)(struct svc_rqst *,struct nfsd4_op *);void (*op_get_currentstateid)(struct nfsd4_compound_state *,union nfsd4_op_u *); void (*op_set_currentstateid)(struct nfsd4_compound_state *,
@@ -2095,13 +2094,13 @@ static struct nfsd4_operation nfsd4_ops[] = { [OP_ACCESS] = { .op_func = (nfsd4op_func)nfsd4_access, .op_name = "OP_ACCESS", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_access_rsize, + .op_rsize_bop = nfsd4_access_rsize, }, [OP_CLOSE] = { .op_func = (nfsd4op_func)nfsd4_close, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_CLOSE", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_status_stateid_rsize, + .op_rsize_bop = nfsd4_status_stateid_rsize, .op_get_currentstateid = nfsd4_get_closestateid, .op_set_currentstateid = nfsd4_set_closestateid, },
@@ -2109,13 +2108,13 @@ static struct nfsd4_operation nfsd4_ops[] = { .op_func = (nfsd4op_func)nfsd4_commit, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_COMMIT", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_commit_rsize, + .op_rsize_bop = nfsd4_commit_rsize, }, [OP_CREATE] = { .op_func = (nfsd4op_func)nfsd4_create, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME | OP_CLEAR_STATEID, .op_name = "OP_CREATE", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_create_rsize, + .op_rsize_bop = nfsd4_create_rsize, }, [OP_DELEGRETURN] = { .op_func = (nfsd4op_func)nfsd4_delegreturn,
@@ -2133,69 +2132,69 @@ static struct nfsd4_operation nfsd4_ops[] = { [OP_GETFH] = { .op_func = (nfsd4op_func)nfsd4_getfh, .op_name = "OP_GETFH", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_getfh_rsize, + .op_rsize_bop = nfsd4_getfh_rsize, }, [OP_LINK] = { .op_func = (nfsd4op_func)nfsd4_link, .op_flags =ALLOWED_ON_ABSENT_FS |OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_LINK", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_link_rsize, + .op_rsize_bop = nfsd4_link_rsize, }, [OP_LOCK] = { .op_func = (nfsd4op_func)nfsd4_lock, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_LOCK", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_lock_rsize, + .op_rsize_bop = nfsd4_lock_rsize, .op_set_currentstateid = nfsd4_set_lockstateid, }, [OP_LOCKT] = { .op_func = (nfsd4op_func)nfsd4_lockt, .op_name = "OP_LOCKT", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_lock_rsize, + .op_rsize_bop = nfsd4_lock_rsize, }, [OP_LOCKU] = { .op_func = (nfsd4op_func)nfsd4_locku, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_LOCKU", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_status_stateid_rsize, + .op_rsize_bop = nfsd4_status_stateid_rsize, .op_get_currentstateid = nfsd4_get_lockustateid, }, [OP_LOOKUP] = { .op_func = (nfsd4op_func)nfsd4_lookup, .op_flags = OP_HANDLES_WRONGSEC | OP_CLEAR_STATEID, .op_name = "OP_LOOKUP", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_LOOKUPP] = { .op_func = (nfsd4op_func)nfsd4_lookupp, .op_flags = OP_HANDLES_WRONGSEC | OP_CLEAR_STATEID, .op_name = "OP_LOOKUPP", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_NVERIFY] = { .op_func = (nfsd4op_func)nfsd4_nverify, .op_name = "OP_NVERIFY", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_OPEN] = { .op_func = (nfsd4op_func)nfsd4_open, .op_flags = OP_HANDLES_WRONGSEC | OP_MODIFIES_SOMETHING, .op_name = "OP_OPEN", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_open_rsize, + .op_rsize_bop = nfsd4_open_rsize, .op_set_currentstateid = nfsd4_set_openstateid, }, [OP_OPEN_CONFIRM] = { .op_func = (nfsd4op_func)nfsd4_open_confirm, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_OPEN_CONFIRM", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_status_stateid_rsize, + .op_rsize_bop = nfsd4_status_stateid_rsize, }, [OP_OPEN_DOWNGRADE] = { .op_func = (nfsd4op_func)nfsd4_open_downgrade, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_OPEN_DOWNGRADE", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_status_stateid_rsize, + .op_rsize_bop = nfsd4_status_stateid_rsize, .op_get_currentstateid = nfsd4_get_opendowngradestateid, .op_set_currentstateid = nfsd4_set_opendowngradestateid, },
@@ -2204,56 +2203,56 @@ static struct nfsd4_operation nfsd4_ops[] = { .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS | OP_IS_PUTFH_LIKE | OP_CLEAR_STATEID, .op_name = "OP_PUTFH", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_PUTPUBFH] = { .op_func = (nfsd4op_func)nfsd4_putrootfh, .op_flags =ALLOWED_WITHOUT_FH |ALLOWED_ON_ABSENT_FS | OP_IS_PUTFH_LIKE | OP_CLEAR_STATEID, .op_name = "OP_PUTPUBFH", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_PUTROOTFH] = { .op_func = (nfsd4op_func)nfsd4_putrootfh, .op_flags =ALLOWED_WITHOUT_FH |ALLOWED_ON_ABSENT_FS | OP_IS_PUTFH_LIKE | OP_CLEAR_STATEID, .op_name = "OP_PUTROOTFH", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_READ] = { .op_func = (nfsd4op_func)nfsd4_read, .op_name = "OP_READ", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_read_rsize, + .op_rsize_bop = nfsd4_read_rsize, .op_get_currentstateid = nfsd4_get_readstateid, }, [OP_READDIR] = { .op_func = (nfsd4op_func)nfsd4_readdir, .op_name = "OP_READDIR", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_readdir_rsize, + .op_rsize_bop = nfsd4_readdir_rsize, }, [OP_READLINK] = { .op_func = (nfsd4op_func)nfsd4_readlink, .op_name = "OP_READLINK", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_readlink_rsize, + .op_rsize_bop = nfsd4_readlink_rsize, }, [OP_REMOVE] = { .op_func = (nfsd4op_func)nfsd4_remove, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_REMOVE", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_remove_rsize, + .op_rsize_bop = nfsd4_remove_rsize, }, [OP_RENAME] = { .op_func = (nfsd4op_func)nfsd4_rename, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_RENAME", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_rename_rsize, + .op_rsize_bop = nfsd4_rename_rsize, }, [OP_RENEW] = { .op_func = (nfsd4op_func)nfsd4_renew, .op_flags =ALLOWED_WITHOUT_FH |ALLOWED_ON_ABSENT_FS | OP_MODIFIES_SOMETHING, .op_name = "OP_RENEW", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_RESTOREFH] = {
@@ -2261,25 +2260,25 @@ static struct nfsd4_operation nfsd4_ops[] = { .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS | OP_IS_PUTFH_LIKE | OP_MODIFIES_SOMETHING, .op_name = "OP_RESTOREFH", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_SAVEFH] = { .op_func = (nfsd4op_func)nfsd4_savefh, .op_flags = OP_HANDLES_WRONGSEC | OP_MODIFIES_SOMETHING, .op_name = "OP_SAVEFH", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_SECINFO] = { .op_func = (nfsd4op_func)nfsd4_secinfo, .op_flags = OP_HANDLES_WRONGSEC, .op_name = "OP_SECINFO", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_secinfo_rsize, + .op_rsize_bop = nfsd4_secinfo_rsize, }, [OP_SETATTR] = { .op_func = (nfsd4op_func)nfsd4_setattr, .op_name = "OP_SETATTR", .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, - .op_rsize_bop = (nfsd4op_rsize)nfsd4_setattr_rsize, + .op_rsize_bop = nfsd4_setattr_rsize, .op_get_currentstateid = nfsd4_get_setattrstateid, }, [OP_SETCLIENTID] = {
@@ -2287,25 +2286,25 @@ static struct nfsd4_operation nfsd4_ops[] = { .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS | OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_SETCLIENTID", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_setclientid_rsize, + .op_rsize_bop = nfsd4_setclientid_rsize, }, [OP_SETCLIENTID_CONFIRM] = { .op_func = (nfsd4op_func)nfsd4_setclientid_confirm, .op_flags =ALLOWED_WITHOUT_FH |ALLOWED_ON_ABSENT_FS | OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_SETCLIENTID_CONFIRM", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_VERIFY] = { .op_func = (nfsd4op_func)nfsd4_verify, .op_name = "OP_VERIFY", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_WRITE] = { .op_func = (nfsd4op_func)nfsd4_write, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_WRITE", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_write_rsize, + .op_rsize_bop = nfsd4_write_rsize, .op_get_currentstateid = nfsd4_get_writestateid, }, [OP_RELEASE_LOCKOWNER] = {
@@ -2313,7 +2312,7 @@ static struct nfsd4_operation nfsd4_ops[] = { .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS | OP_MODIFIES_SOMETHING, .op_name = "OP_RELEASE_LOCKOWNER", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, },/* NFSv4.1 operations */
@@ -2322,97 +2321,97 @@ static struct nfsd4_operation nfsd4_ops[] = { .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP | OP_MODIFIES_SOMETHING, .op_name = "OP_EXCHANGE_ID", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_exchange_id_rsize, + .op_rsize_bop = nfsd4_exchange_id_rsize, }, [OP_BACKCHANNEL_CTL] = { .op_func = (nfsd4op_func)nfsd4_backchannel_ctl, .op_flags = ALLOWED_WITHOUT_FH | OP_MODIFIES_SOMETHING, .op_name = "OP_BACKCHANNEL_CTL", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_BIND_CONN_TO_SESSION] = { .op_func = (nfsd4op_func)nfsd4_bind_conn_to_session, .op_flags =ALLOWED_WITHOUT_FH |ALLOWED_AS_FIRST_OP | OP_MODIFIES_SOMETHING, .op_name = "OP_BIND_CONN_TO_SESSION", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_bind_conn_to_session_rsize, + .op_rsize_bop = nfsd4_bind_conn_to_session_rsize, }, [OP_CREATE_SESSION] = { .op_func = (nfsd4op_func)nfsd4_create_session, .op_flags =ALLOWED_WITHOUT_FH |ALLOWED_AS_FIRST_OP | OP_MODIFIES_SOMETHING, .op_name = "OP_CREATE_SESSION", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_create_session_rsize, + .op_rsize_bop = nfsd4_create_session_rsize, }, [OP_DESTROY_SESSION] = { .op_func = (nfsd4op_func)nfsd4_destroy_session, .op_flags =ALLOWED_WITHOUT_FH |ALLOWED_AS_FIRST_OP | OP_MODIFIES_SOMETHING, .op_name = "OP_DESTROY_SESSION", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_SEQUENCE] = { .op_func = (nfsd4op_func)nfsd4_sequence, .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP, .op_name = "OP_SEQUENCE", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_sequence_rsize, + .op_rsize_bop = nfsd4_sequence_rsize, }, [OP_DESTROY_CLIENTID] = { .op_func = (nfsd4op_func)nfsd4_destroy_clientid, .op_flags =ALLOWED_WITHOUT_FH |ALLOWED_AS_FIRST_OP | OP_MODIFIES_SOMETHING, .op_name = "OP_DESTROY_CLIENTID", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_RECLAIM_COMPLETE] = { .op_func = (nfsd4op_func)nfsd4_reclaim_complete, .op_flags = ALLOWED_WITHOUT_FH | OP_MODIFIES_SOMETHING, .op_name = "OP_RECLAIM_COMPLETE", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_SECINFO_NO_NAME] = { .op_func = (nfsd4op_func)nfsd4_secinfo_no_name, .op_flags = OP_HANDLES_WRONGSEC, .op_name = "OP_SECINFO_NO_NAME", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_secinfo_rsize, + .op_rsize_bop = nfsd4_secinfo_rsize, }, [OP_TEST_STATEID] = { .op_func = (nfsd4op_func)nfsd4_test_stateid, .op_flags = ALLOWED_WITHOUT_FH, .op_name = "OP_TEST_STATEID", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_test_stateid_rsize, + .op_rsize_bop = nfsd4_test_stateid_rsize, }, [OP_FREE_STATEID] = { .op_func = (nfsd4op_func)nfsd4_free_stateid, .op_flags = ALLOWED_WITHOUT_FH | OP_MODIFIES_SOMETHING, .op_name = "OP_FREE_STATEID", .op_get_currentstateid = nfsd4_get_freestateid, - .op_rsize_bop = (nfsd4op_rsize )nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, #ifdef CONFIG_NFSD_PNFS [OP_GETDEVICEINFO] = { .op_func = (nfsd4op_func )nfsd4_getdeviceinfo, .op_flags = ALLOWED_WITHOUT_FH, .op_name = "OP_GETDEVICEINFO", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_getdeviceinfo_rsize, + .op_rsize_bop = nfsd4_getdeviceinfo_rsize, }, [OP_LAYOUTGET] = { .op_func = (nfsd4op_func )nfsd4_layoutget, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_LAYOUTGET", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_layoutget_rsize, + .op_rsize_bop = nfsd4_layoutget_rsize, }, [OP_LAYOUTCOMMIT] = { .op_func = (nfsd4op_func )nfsd4_layoutcommit, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_LAYOUTCOMMIT", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_layoutcommit_rsize, + .op_rsize_bop = nfsd4_layoutcommit_rsize, }, [OP_LAYOUTRETURN] = { .op_func = (nfsd4op_func )nfsd4_layoutreturn, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_LAYOUTRETURN", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_layoutreturn_rsize, + .op_rsize_bop = nfsd4_layoutreturn_rsize, }, #endif /* CONFIG_NFSD_PNFS */
@@ -2421,30 +2420,30 @@ static struct nfsd4_operation nfsd4_ops[] = { .op_func = (nfsd4op_func)nfsd4_allocate, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_ALLOCATE", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_DEALLOCATE] = { .op_func = (nfsd4op_func)nfsd4_deallocate, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_DEALLOCATE", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_CLONE] = { .op_func = (nfsd4op_func)nfsd4_clone, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_CLONE", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_COPY] = { .op_func = (nfsd4op_func)nfsd4_copy, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_COPY", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_copy_rsize, + .op_rsize_bop = nfsd4_copy_rsize, }, [OP_SEEK] = { .op_func = (nfsd4op_func)nfsd4_seek, .op_name = "OP_SEEK", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_seek_rsize, + .op_rsize_bop = nfsd4_seek_rsize, }, };
Signature · 1 line
2.11.0
PATCH 28/32 nfsd4: properly type op_func callbacks
In reply to Christoph HellwigPass union nfsd4_op_u to the op_func callbacks instead of using unsafe function pointer casts.
It also adds two missing structures to struct nfsd4_op.u to facilitate this.
--- fs/nfsd/nfs4proc.c | 234 ++++++++++++++++++++++++++++------------------------ fs/nfsd/nfs4state.c | 82 +++++++++++------- fs/nfsd/xdr4.h | 66 +++++++-------- 3 files changed, 209 insertions(+), 173 deletions(-)
fs/nfsd/nfs4proc.c +126 -108
@@ -344,8 +344,9 @@ copy_clientid(clientid_t *clid, struct nfsd4_session *session)static __be32 nfsd4_open (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct nfsd4_open *open) +union nfsd4_op_u *u) { +struct nfsd4_open *open = &u->open;__be32 status;struct svc_fh *resfh =NULL ;struct net *net =SVC_NET (rqstp);
@@ -467,14 +468,14 @@ nfsd4_open(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,*/ static __be32 nfsd4_open_omfg (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate,struct nfsd4_op *op) { -struct nfsd4_open *open = (struct nfsd4_open *)&op->u; +struct nfsd4_open *open = &op->u.open;if (!seqid_mutating_err (ntohl (op->status)))return op->status;if (nfsd4_has_session (cstate))return op->status; open->op_xdr_error = op->status; -return nfsd4_open (rqstp, cstate, open); +return nfsd4_open (rqstp, cstate, &op->u); }/*
@@ -482,19 +483,21 @@ static __be32 nfsd4_open_omfg(struct svc_rqst *rqstp, struct nfsd4_compound_stat*/ static __be32 nfsd4_getfh (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct svc_fh **getfh) +union nfsd4_op_u *u) {if (!cstate->current_fh.fh_dentry)return nfserr_nofilehandle; - *getfh = &cstate->current_fh; + u->getfh = &cstate->current_fh;return nfs_ok; }static __be32 nfsd4_putfh (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct nfsd4_putfh *putfh) +union nfsd4_op_u *u) { +struct nfsd4_putfh *putfh = &u->putfh; +fh_put (&cstate->current_fh); cstate->current_fh.fh_handle.fh_size = putfh->pf_fhlen; memcpy(&cstate->current_fh.fh_handle.fh_base, putfh->pf_fhval,
@@ -504,7 +507,7 @@ nfsd4_putfh(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,static __be32 nfsd4_putrootfh (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -void *arg) +union nfsd4_op_u *u) {__be32 status;
@@ -515,7 +518,7 @@ nfsd4_putrootfh(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,static __be32 nfsd4_restorefh (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -void *arg) +union nfsd4_op_u *u) {if (!cstate->save_fh.fh_dentry)return nfserr_restorefh;
@@ -530,7 +533,7 @@ nfsd4_restorefh(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,static __be32 nfsd4_savefh (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -void *arg) +union nfsd4_op_u *u) {if (!cstate->current_fh.fh_dentry)return nfserr_nofilehandle;
@@ -548,8 +551,10 @@ nfsd4_savefh(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,*/ static __be32 nfsd4_access (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct nfsd4_access *access) +union nfsd4_op_u *u) { +struct nfsd4_access *access = &u->access; +if (access->ac_req_access & ~NFS3_ACCESS_FULL )return nfserr_inval;
@@ -574,8 +579,10 @@ static void gen_boot_verifier(nfs4_verifier *verifier, struct net *net)static __be32 nfsd4_commit (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct nfsd4_commit *commit) +union nfsd4_op_u *u) { +struct nfsd4_commit *commit = &u->commit; +gen_boot_verifier (&commit->co_verf,SVC_NET (rqstp));return nfsd_commit (rqstp, &cstate->current_fh, commit->co_offset, commit->co_count);
@@ -583,8 +590,9 @@ nfsd4_commit(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,static __be32 nfsd4_create (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct nfsd4_create *create) +union nfsd4_op_u *u) { +struct nfsd4_create *create = &u->create;struct svc_fh resfh;__be32 status;dev_t rdev;
@@ -670,8 +678,9 @@ nfsd4_create(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,static __be32 nfsd4_getattr (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct nfsd4_getattr *getattr) +union nfsd4_op_u *u) { +struct nfsd4_getattr *getattr = &u->getattr;__be32 status; status =fh_verify (rqstp, &cstate->current_fh,0 ,NFSD_MAY_NOP );
@@ -691,8 +700,9 @@ nfsd4_getattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,static __be32 nfsd4_link (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct nfsd4_link *link) +union nfsd4_op_u *u) { +struct nfsd4_link *link = &u->link;__be32 status = nfserr_nofilehandle;if (!cstate->save_fh.fh_dentry)
@@ -723,24 +733,25 @@ static __be32 nfsd4_do_lookupp(struct svc_rqst *rqstp, struct svc_fh *fh)static __be32 nfsd4_lookupp (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -void *arg) +union nfsd4_op_u *u) {return nfsd4_do_lookupp (rqstp, &cstate->current_fh); }static __be32 nfsd4_lookup (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct nfsd4_lookup *lookup) +union nfsd4_op_u *u) {return nfsd_lookup (rqstp, &cstate->current_fh, - lookup->lo_name, lookup->lo_len, + u->lookup.lo_name, u->lookup.lo_len, &cstate->current_fh); }static __be32 nfsd4_read (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct nfsd4_read *read) +union nfsd4_op_u *u) { +struct nfsd4_read *read = &u->read;__be32 status; read->rd_filp =NULL ;
@@ -775,8 +786,9 @@ nfsd4_read(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,static __be32 nfsd4_readdir (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct nfsd4_readdir *readdir) +union nfsd4_op_u *u) { +struct nfsd4_readdir *readdir = &u->readdir;u64 cookie = readdir->rd_cookie;static const nfs4_verifier zeroverf;
@@ -800,17 +812,18 @@ nfsd4_readdir(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,static __be32 nfsd4_readlink (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct nfsd4_readlink *readlink) +union nfsd4_op_u *u) { - readlink->rl_rqstp = rqstp; - readlink->rl_fhp = &cstate->current_fh; + u->readlink.rl_rqstp = rqstp; + u->readlink.rl_fhp = &cstate->current_fh;return nfs_ok; }static __be32 nfsd4_remove (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct nfsd4_remove *remove) +union nfsd4_op_u *u) { +struct nfsd4_remove *remove = &u->remove;__be32 status;if (opens_in_grace (SVC_NET (rqstp)))
@@ -826,8 +839,9 @@ nfsd4_remove(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,static __be32 nfsd4_rename (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct nfsd4_rename *rename) +union nfsd4_op_u *u) { +struct nfsd4_rename *rename = &u->rename;__be32 status = nfserr_nofilehandle;if (!cstate->save_fh.fh_dentry)
@@ -847,8 +861,9 @@ nfsd4_rename(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,static __be32 nfsd4_secinfo (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct nfsd4_secinfo *secinfo) +union nfsd4_op_u *u) { +struct nfsd4_secinfo *secinfo = &u->secinfo;struct svc_export *exp;struct dentry *dentry;__be32 err;
@@ -876,11 +891,11 @@ nfsd4_secinfo(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,static __be32 nfsd4_secinfo_no_name (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct nfsd4_secinfo_no_name *sin) +union nfsd4_op_u *u) {__be32 err; -switch (sin->sin_style) { +switch (u->secinfo_no_name.sin_style) {case NFS4_SECINFO_STYLE4_CURRENT_FH :break ;case NFS4_SECINFO_STYLE4_PARENT :
@@ -892,15 +907,16 @@ nfsd4_secinfo_no_name(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstatreturn nfserr_inval; } - sin->sin_exp =exp_get (cstate->current_fh.fh_export); + u->secinfo_no_name.sin_exp =exp_get (cstate->current_fh.fh_export);fh_put (&cstate->current_fh);return nfs_ok; }static __be32 nfsd4_setattr (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct nfsd4_setattr *setattr) +union nfsd4_op_u *u) { +struct nfsd4_setattr *setattr = &u->setattr;__be32 status = nfs_ok;int err;
@@ -960,8 +976,9 @@ static int fill_in_write_vector(struct kvec *vec, struct nfsd4_write *write)static __be32 nfsd4_write (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct nfsd4_write *write) +union nfsd4_op_u *u) { +struct nfsd4_write *write = &u->write;stateid_t *stateid = &write->wr_stateid;struct file *filp =NULL ;__be32 status = nfs_ok;
@@ -1034,8 +1051,9 @@ nfsd4_verify_copy(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,static __be32 nfsd4_clone (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct nfsd4_clone *clone) +union nfsd4_op_u *u) { +struct nfsd4_clone *clone = &u->clone;struct file *src, *dst;__be32 status;
@@ -1055,8 +1073,9 @@ nfsd4_clone(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,static __be32 nfsd4_copy (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct nfsd4_copy *copy) +union nfsd4_op_u *u) { +struct nfsd4_copy *copy = &u->copy;struct file *src, *dst;__be32 status;ssize_t bytes;
@@ -1111,23 +1130,24 @@ nfsd4_fallocate(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,static __be32 nfsd4_allocate (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct nfsd4_fallocate *fallocate) +union nfsd4_op_u *u) { -return nfsd4_fallocate (rqstp, cstate, fallocate,0 ); +return nfsd4_fallocate (rqstp, cstate, &u->allocate,0 ); }static __be32 nfsd4_deallocate (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct nfsd4_fallocate *fallocate) +union nfsd4_op_u *u) { -return nfsd4_fallocate (rqstp, cstate, fallocate, +return nfsd4_fallocate (rqstp, cstate, &u->deallocate,FALLOC_FL_PUNCH_HOLE |FALLOC_FL_KEEP_SIZE ); }static __be32 nfsd4_seek (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct nfsd4_seek *seek) +union nfsd4_op_u *u) { +struct nfsd4_seek *seek = &u->seek;int whence;__be32 status;struct file *file;
@@ -1232,21 +1252,21 @@ _nfsd4_verify(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,static __be32 nfsd4_nverify (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct nfsd4_verify *verify) +union nfsd4_op_u *u) {__be32 status; - status =_nfsd4_verify (rqstp, cstate, verify); + status =_nfsd4_verify (rqstp, cstate, &u->verify);return status == nfserr_not_same ? nfs_ok : status; }static __be32 nfsd4_verify (struct svc_rqst *rqstp,struct nfsd4_compound_state *cstate, -struct nfsd4_verify *verify) +union nfsd4_op_u *u) {__be32 status; - status =_nfsd4_verify (rqstp, cstate, verify); + status =_nfsd4_verify (rqstp, cstate, &u->nverify);return status == nfserr_same ? nfs_ok : status; }
@@ -1270,9 +1290,9 @@ nfsd4_layout_verify(struct svc_export *exp, unsigned int layout_type)static __be32 nfsd4_getdeviceinfo (struct svc_rqst *rqstp, -struct nfsd4_compound_state *cstate, -struct nfsd4_getdeviceinfo *gdp) +struct nfsd4_compound_state *cstate,union nfsd4_op_u *u) { +struct nfsd4_getdeviceinfo *gdp = &u->getdeviceinfo;const struct nfsd4_layout_ops *ops;struct nfsd4_deviceid_map *map;struct svc_export *exp;
@@ -1316,9 +1336,9 @@ nfsd4_getdeviceinfo(struct svc_rqst *rqstp,static __be32 nfsd4_layoutget (struct svc_rqst *rqstp, -struct nfsd4_compound_state *cstate, -struct nfsd4_layoutget *lgp) +struct nfsd4_compound_state *cstate,union nfsd4_op_u *u) { +struct nfsd4_layoutget *lgp = &u->layoutget;struct svc_fh *current_fh = &cstate->current_fh;const struct nfsd4_layout_ops *ops;struct nfs4_layout_stateid *ls;
@@ -1396,9 +1416,9 @@ nfsd4_layoutget(struct svc_rqst *rqstp,static __be32 nfsd4_layoutcommit (struct svc_rqst *rqstp, -struct nfsd4_compound_state *cstate, -struct nfsd4_layoutcommit *lcp) +struct nfsd4_compound_state *cstate,union nfsd4_op_u *u) { +struct nfsd4_layoutcommit *lcp = &u->layoutcommit;const struct nfsd4_layout_seg *seg = &lcp->lc_seg;struct svc_fh *current_fh = &cstate->current_fh;const struct nfsd4_layout_ops *ops;
@@ -1460,9 +1480,9 @@ nfsd4_layoutcommit(struct svc_rqst *rqstp,static __be32 nfsd4_layoutreturn (struct svc_rqst *rqstp, -struct nfsd4_compound_state *cstate, -struct nfsd4_layoutreturn *lrp) +struct nfsd4_compound_state *cstate,union nfsd4_op_u *u) { +struct nfsd4_layoutreturn *lrp = &u->layoutreturn;struct svc_fh *current_fh = &cstate->current_fh;__be32 nfserr;
@@ -1520,9 +1540,6 @@ static inline void nfsd4_increment_op_stats(u32 opnum) nfsdstats.nfs4_opcount[opnum]++; } -typedef __be32 (*nfsd4op_func )(struct svc_rqst *,struct nfsd4_compound_state *, -void *); -enum nfsd4_op_flags {ALLOWED_WITHOUT_FH =1 <<0 ,/* No current filehandle required */ ALLOWED_ON_ABSENT_FS =1 <<1 ,/* ops processed on absent fs */
@@ -1554,7 +1571,8 @@ enum nfsd4_op_flags { };struct nfsd4_operation { -nfsd4op_func op_func; +__be32 (*op_func)(struct svc_rqst *,struct nfsd4_compound_state *, +union nfsd4_op_u *);u32 op_flags;char *op_name;/* Try to get response size before operation */
@@ -2092,12 +2110,12 @@ static inline u32 nfsd4_seek_rsize(struct svc_rqst *rqstp, struct nfsd4_op *op)static struct nfsd4_operation nfsd4_ops[] = { [OP_ACCESS ] = { - .op_func = (nfsd4op_func )nfsd4_access, + .op_func = nfsd4_access, .op_name ="OP_ACCESS" , .op_rsize_bop = nfsd4_access_rsize, }, [OP_CLOSE ] = { - .op_func = (nfsd4op_func )nfsd4_close, + .op_func = nfsd4_close, .op_flags =OP_MODIFIES_SOMETHING , .op_name ="OP_CLOSE" , .op_rsize_bop = nfsd4_status_stateid_rsize,
@@ -2105,93 +2123,93 @@ static struct nfsd4_operation nfsd4_ops[] = { .op_set_currentstateid = nfsd4_set_closestateid, }, [OP_COMMIT] = { - .op_func = (nfsd4op_func)nfsd4_commit, + .op_func = nfsd4_commit, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_COMMIT", .op_rsize_bop = nfsd4_commit_rsize, }, [OP_CREATE] = { - .op_func = (nfsd4op_func)nfsd4_create, + .op_func = nfsd4_create, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME | OP_CLEAR_STATEID, .op_name = "OP_CREATE", .op_rsize_bop = nfsd4_create_rsize, }, [OP_DELEGRETURN] = { - .op_func = (nfsd4op_func)nfsd4_delegreturn, + .op_func = nfsd4_delegreturn, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_DELEGRETURN", .op_rsize_bop = nfsd4_only_status_rsize, .op_get_currentstateid = nfsd4_get_delegreturnstateid, }, [OP_GETATTR] = { - .op_func = (nfsd4op_func)nfsd4_getattr, + .op_func = nfsd4_getattr, .op_flags = ALLOWED_ON_ABSENT_FS, .op_rsize_bop = nfsd4_getattr_rsize, .op_name = "OP_GETATTR", }, [OP_GETFH] = { - .op_func = (nfsd4op_func)nfsd4_getfh, + .op_func = nfsd4_getfh, .op_name = "OP_GETFH", .op_rsize_bop = nfsd4_getfh_rsize, }, [OP_LINK] = { - .op_func = (nfsd4op_func)nfsd4_link, + .op_func = nfsd4_link, .op_flags =ALLOWED_ON_ABSENT_FS |OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_LINK", .op_rsize_bop = nfsd4_link_rsize, }, [OP_LOCK] = { - .op_func = (nfsd4op_func)nfsd4_lock, + .op_func = nfsd4_lock, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_LOCK", .op_rsize_bop = nfsd4_lock_rsize, .op_set_currentstateid = nfsd4_set_lockstateid, }, [OP_LOCKT] = { - .op_func = (nfsd4op_func)nfsd4_lockt, + .op_func = nfsd4_lockt, .op_name = "OP_LOCKT", .op_rsize_bop = nfsd4_lock_rsize, }, [OP_LOCKU] = { - .op_func = (nfsd4op_func)nfsd4_locku, + .op_func = nfsd4_locku, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_LOCKU", .op_rsize_bop = nfsd4_status_stateid_rsize, .op_get_currentstateid = nfsd4_get_lockustateid, }, [OP_LOOKUP] = { - .op_func = (nfsd4op_func)nfsd4_lookup, + .op_func = nfsd4_lookup, .op_flags = OP_HANDLES_WRONGSEC | OP_CLEAR_STATEID, .op_name = "OP_LOOKUP", .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_LOOKUPP] = { - .op_func = (nfsd4op_func)nfsd4_lookupp, + .op_func = nfsd4_lookupp, .op_flags = OP_HANDLES_WRONGSEC | OP_CLEAR_STATEID, .op_name = "OP_LOOKUPP", .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_NVERIFY] = { - .op_func = (nfsd4op_func)nfsd4_nverify, + .op_func = nfsd4_nverify, .op_name = "OP_NVERIFY", .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_OPEN] = { - .op_func = (nfsd4op_func)nfsd4_open, + .op_func = nfsd4_open, .op_flags = OP_HANDLES_WRONGSEC | OP_MODIFIES_SOMETHING, .op_name = "OP_OPEN", .op_rsize_bop = nfsd4_open_rsize, .op_set_currentstateid = nfsd4_set_openstateid, }, [OP_OPEN_CONFIRM] = { - .op_func = (nfsd4op_func)nfsd4_open_confirm, + .op_func = nfsd4_open_confirm, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_OPEN_CONFIRM", .op_rsize_bop = nfsd4_status_stateid_rsize, }, [OP_OPEN_DOWNGRADE] = { - .op_func = (nfsd4op_func)nfsd4_open_downgrade, + .op_func = nfsd4_open_downgrade, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_OPEN_DOWNGRADE", .op_rsize_bop = nfsd4_status_stateid_rsize,
@@ -2199,56 +2217,56 @@ static struct nfsd4_operation nfsd4_ops[] = { .op_set_currentstateid = nfsd4_set_opendowngradestateid, }, [OP_PUTFH] = { - .op_func = (nfsd4op_func)nfsd4_putfh, + .op_func = nfsd4_putfh, .op_flags =ALLOWED_WITHOUT_FH |ALLOWED_ON_ABSENT_FS | OP_IS_PUTFH_LIKE | OP_CLEAR_STATEID, .op_name = "OP_PUTFH", .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_PUTPUBFH] = { - .op_func = (nfsd4op_func)nfsd4_putrootfh, + .op_func = nfsd4_putrootfh, .op_flags =ALLOWED_WITHOUT_FH |ALLOWED_ON_ABSENT_FS | OP_IS_PUTFH_LIKE | OP_CLEAR_STATEID, .op_name = "OP_PUTPUBFH", .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_PUTROOTFH] = { - .op_func = (nfsd4op_func)nfsd4_putrootfh, + .op_func = nfsd4_putrootfh, .op_flags =ALLOWED_WITHOUT_FH |ALLOWED_ON_ABSENT_FS | OP_IS_PUTFH_LIKE | OP_CLEAR_STATEID, .op_name = "OP_PUTROOTFH", .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_READ] = { - .op_func = (nfsd4op_func)nfsd4_read, + .op_func = nfsd4_read, .op_name = "OP_READ", .op_rsize_bop = nfsd4_read_rsize, .op_get_currentstateid = nfsd4_get_readstateid, }, [OP_READDIR] = { - .op_func = (nfsd4op_func)nfsd4_readdir, + .op_func = nfsd4_readdir, .op_name = "OP_READDIR", .op_rsize_bop = nfsd4_readdir_rsize, }, [OP_READLINK] = { - .op_func = (nfsd4op_func)nfsd4_readlink, + .op_func = nfsd4_readlink, .op_name = "OP_READLINK", .op_rsize_bop = nfsd4_readlink_rsize, }, [OP_REMOVE] = { - .op_func = (nfsd4op_func)nfsd4_remove, + .op_func = nfsd4_remove, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_REMOVE", .op_rsize_bop = nfsd4_remove_rsize, }, [OP_RENAME] = { - .op_func = (nfsd4op_func)nfsd4_rename, + .op_func = nfsd4_rename, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_RENAME", .op_rsize_bop = nfsd4_rename_rsize, }, [OP_RENEW] = { - .op_func = (nfsd4op_func)nfsd4_renew, + .op_func = nfsd4_renew, .op_flags =ALLOWED_WITHOUT_FH |ALLOWED_ON_ABSENT_FS | OP_MODIFIES_SOMETHING, .op_name = "OP_RENEW",
@@ -2256,59 +2274,59 @@ static struct nfsd4_operation nfsd4_ops[] = { }, [OP_RESTOREFH] = { - .op_func = (nfsd4op_func)nfsd4_restorefh, + .op_func = nfsd4_restorefh, .op_flags =ALLOWED_WITHOUT_FH |ALLOWED_ON_ABSENT_FS | OP_IS_PUTFH_LIKE | OP_MODIFIES_SOMETHING, .op_name = "OP_RESTOREFH", .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_SAVEFH] = { - .op_func = (nfsd4op_func)nfsd4_savefh, + .op_func = nfsd4_savefh, .op_flags = OP_HANDLES_WRONGSEC | OP_MODIFIES_SOMETHING, .op_name = "OP_SAVEFH", .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_SECINFO] = { - .op_func = (nfsd4op_func)nfsd4_secinfo, + .op_func = nfsd4_secinfo, .op_flags = OP_HANDLES_WRONGSEC, .op_name = "OP_SECINFO", .op_rsize_bop = nfsd4_secinfo_rsize, }, [OP_SETATTR] = { - .op_func = (nfsd4op_func)nfsd4_setattr, + .op_func = nfsd4_setattr, .op_name = "OP_SETATTR", .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, .op_rsize_bop = nfsd4_setattr_rsize, .op_get_currentstateid = nfsd4_get_setattrstateid, }, [OP_SETCLIENTID] = { - .op_func = (nfsd4op_func)nfsd4_setclientid, + .op_func = nfsd4_setclientid, .op_flags =ALLOWED_WITHOUT_FH |ALLOWED_ON_ABSENT_FS | OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_SETCLIENTID", .op_rsize_bop = nfsd4_setclientid_rsize, }, [OP_SETCLIENTID_CONFIRM] = { - .op_func = (nfsd4op_func)nfsd4_setclientid_confirm, + .op_func = nfsd4_setclientid_confirm, .op_flags =ALLOWED_WITHOUT_FH |ALLOWED_ON_ABSENT_FS | OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_SETCLIENTID_CONFIRM", .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_VERIFY] = { - .op_func = (nfsd4op_func)nfsd4_verify, + .op_func = nfsd4_verify, .op_name = "OP_VERIFY", .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_WRITE] = { - .op_func = (nfsd4op_func)nfsd4_write, + .op_func = nfsd4_write, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_WRITE", .op_rsize_bop = nfsd4_write_rsize, .op_get_currentstateid = nfsd4_get_writestateid, }, [OP_RELEASE_LOCKOWNER] = { - .op_func = (nfsd4op_func)nfsd4_release_lockowner, + .op_func = nfsd4_release_lockowner, .op_flags =ALLOWED_WITHOUT_FH |ALLOWED_ON_ABSENT_FS | OP_MODIFIES_SOMETHING, .op_name = "OP_RELEASE_LOCKOWNER",
@@ -2317,72 +2335,72 @@ static struct nfsd4_operation nfsd4_ops[] = { /* NFSv4.1 operations */ [OP_EXCHANGE_ID] = { - .op_func = (nfsd4op_func)nfsd4_exchange_id, + .op_func = nfsd4_exchange_id, .op_flags =ALLOWED_WITHOUT_FH |ALLOWED_AS_FIRST_OP | OP_MODIFIES_SOMETHING, .op_name = "OP_EXCHANGE_ID", .op_rsize_bop = nfsd4_exchange_id_rsize, }, [OP_BACKCHANNEL_CTL] = { - .op_func = (nfsd4op_func)nfsd4_backchannel_ctl, + .op_func = nfsd4_backchannel_ctl, .op_flags = ALLOWED_WITHOUT_FH | OP_MODIFIES_SOMETHING, .op_name = "OP_BACKCHANNEL_CTL", .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_BIND_CONN_TO_SESSION] = { - .op_func = (nfsd4op_func)nfsd4_bind_conn_to_session, + .op_func = nfsd4_bind_conn_to_session, .op_flags =ALLOWED_WITHOUT_FH |ALLOWED_AS_FIRST_OP | OP_MODIFIES_SOMETHING, .op_name = "OP_BIND_CONN_TO_SESSION", .op_rsize_bop = nfsd4_bind_conn_to_session_rsize, }, [OP_CREATE_SESSION] = { - .op_func = (nfsd4op_func)nfsd4_create_session, + .op_func = nfsd4_create_session, .op_flags =ALLOWED_WITHOUT_FH |ALLOWED_AS_FIRST_OP | OP_MODIFIES_SOMETHING, .op_name = "OP_CREATE_SESSION", .op_rsize_bop = nfsd4_create_session_rsize, }, [OP_DESTROY_SESSION] = { - .op_func = (nfsd4op_func)nfsd4_destroy_session, + .op_func = nfsd4_destroy_session, .op_flags =ALLOWED_WITHOUT_FH |ALLOWED_AS_FIRST_OP | OP_MODIFIES_SOMETHING, .op_name = "OP_DESTROY_SESSION", .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_SEQUENCE] = { - .op_func = (nfsd4op_func)nfsd4_sequence, + .op_func = nfsd4_sequence, .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP, .op_name = "OP_SEQUENCE", .op_rsize_bop = nfsd4_sequence_rsize, }, [OP_DESTROY_CLIENTID] = { - .op_func = (nfsd4op_func)nfsd4_destroy_clientid, + .op_func = nfsd4_destroy_clientid, .op_flags =ALLOWED_WITHOUT_FH |ALLOWED_AS_FIRST_OP | OP_MODIFIES_SOMETHING, .op_name = "OP_DESTROY_CLIENTID", .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_RECLAIM_COMPLETE] = { - .op_func = (nfsd4op_func)nfsd4_reclaim_complete, + .op_func = nfsd4_reclaim_complete, .op_flags = ALLOWED_WITHOUT_FH | OP_MODIFIES_SOMETHING, .op_name = "OP_RECLAIM_COMPLETE", .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_SECINFO_NO_NAME] = { - .op_func = (nfsd4op_func)nfsd4_secinfo_no_name, + .op_func = nfsd4_secinfo_no_name, .op_flags = OP_HANDLES_WRONGSEC, .op_name = "OP_SECINFO_NO_NAME", .op_rsize_bop = nfsd4_secinfo_rsize, }, [OP_TEST_STATEID] = { - .op_func = (nfsd4op_func)nfsd4_test_stateid, + .op_func = nfsd4_test_stateid, .op_flags = ALLOWED_WITHOUT_FH, .op_name = "OP_TEST_STATEID", .op_rsize_bop = nfsd4_test_stateid_rsize, }, [OP_FREE_STATEID] = { - .op_func = (nfsd4op_func)nfsd4_free_stateid, + .op_func = nfsd4_free_stateid, .op_flags = ALLOWED_WITHOUT_FH | OP_MODIFIES_SOMETHING, .op_name = "OP_FREE_STATEID", .op_get_currentstateid = nfsd4_get_freestateid,
@@ -2390,25 +2408,25 @@ static struct nfsd4_operation nfsd4_ops[] = { }, #ifdef CONFIG_NFSD_PNFS [OP_GETDEVICEINFO] = { - .op_func = (nfsd4op_func)nfsd4_getdeviceinfo, + .op_func = nfsd4_getdeviceinfo, .op_flags = ALLOWED_WITHOUT_FH, .op_name = "OP_GETDEVICEINFO", .op_rsize_bop = nfsd4_getdeviceinfo_rsize, }, [OP_LAYOUTGET] = { - .op_func = (nfsd4op_func)nfsd4_layoutget, + .op_func = nfsd4_layoutget, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_LAYOUTGET", .op_rsize_bop = nfsd4_layoutget_rsize, }, [OP_LAYOUTCOMMIT] = { - .op_func = (nfsd4op_func)nfsd4_layoutcommit, + .op_func = nfsd4_layoutcommit, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_LAYOUTCOMMIT", .op_rsize_bop = nfsd4_layoutcommit_rsize, }, [OP_LAYOUTRETURN] = { - .op_func = (nfsd4op_func)nfsd4_layoutreturn, + .op_func = nfsd4_layoutreturn, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_LAYOUTRETURN", .op_rsize_bop = nfsd4_layoutreturn_rsize,
@@ -2417,31 +2435,31 @@ static struct nfsd4_operation nfsd4_ops[] = { /* NFSv4.2 operations */ [OP_ALLOCATE] = { - .op_func = (nfsd4op_func)nfsd4_allocate, + .op_func = nfsd4_allocate, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_ALLOCATE", .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_DEALLOCATE] = { - .op_func = (nfsd4op_func)nfsd4_deallocate, + .op_func = nfsd4_deallocate, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_DEALLOCATE", .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_CLONE] = { - .op_func = (nfsd4op_func)nfsd4_clone, + .op_func = nfsd4_clone, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_CLONE", .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_COPY] = { - .op_func = (nfsd4op_func)nfsd4_copy, + .op_func = nfsd4_copy, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_COPY", .op_rsize_bop = nfsd4_copy_rsize, }, [OP_SEEK] = { - .op_func = (nfsd4op_func)nfsd4_seek, + .op_func = nfsd4_seek, .op_name = "OP_SEEK", .op_rsize_bop = nfsd4_seek_rsize, },
fs/nfsd/nfs4state.c +52 -30
229 lines not on this page · raw message
fs/nfsd/xdr4.h +31 -35
104 lines not on this page · raw message
Signature · 1 line
2.11.0
PATCH 29/32 RFC: sunrpc: remove pc_count
In reply to Christoph Hellwigpc_count is the only writeable memeber of struct svc_procinfo, which is a good candidate to be const-ified as it contains function pointers.
This patch just removes it and returns zero in the /proc file as the count of calls per procedure doesn't seem all that useful. But it's just a dumb hack and we might need a proper fix instead.
--- include/linux/sunrpc/svc.h | 1 - net/sunrpc/stats.c | 2 +- net/sunrpc/svc.c | 3 --- 3 files changed, 1 insertion(+), 5 deletions(-)
include/linux/sunrpc/svc.h +0 -1
@@ -430,7 +430,6 @@ struct svc_procedure {void (*pc_release)(struct svc_rqst *);unsigned int pc_argsize;/* argument struct size */ unsigned int pc_ressize;/* result struct size */ -unsigned int pc_count;/* call count */ unsigned int pc_cachetype;/* cache info (NFS) */ unsigned int pc_xdrressize;/* maximum size of XDR reply */ };
net/sunrpc/stats.c +1 -1
@@ -102,7 +102,7 @@ void svc_seq_show(struct seq_file *seq, const struct svc_stat *statp) {continue ;seq_printf (seq,"proc%d %u" , i, vers->vs_nproc);for (j =0 ; j < vers->vs_nproc; j++, proc++) -seq_printf (seq," %u" , proc->pc_count); +seq_printf (seq," %u" ,0 );seq_putc (seq,'\n' ); } }
net/sunrpc/svc.c +0 -3
@@ -1202,9 +1202,6 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv) statp = resv->iov_base +resv->iov_len;svc_putnl (resv,RPC_SUCCESS ); -/* Bump per-procedure stats counter */ - procp->pc_count++; -/* Initialize storage for argp and resp */ memset (rqstp->rq_argp,0 , procp->pc_argsize);memset (rqstp->rq_resp,0 , procp->pc_ressize);
Signature · 1 line
2.11.0
Re: [PATCH 29/32] RFC: sunrpc: remove pc_count
T24gVHVlLCAyMDE3LTA1LTA5IGF0IDExOjIwICswMjAwLCBDaHJpc3RvcGggSGVsbHdpZyB3cm90 ZToNCj4gcGNfY291bnQgaXMgdGhlIG9ubHkgd3JpdGVhYmxlIG1lbWViZXIgb2Ygc3RydWN0IHN2 Y19wcm9jaW5mbywgd2hpY2gNCj4gaXMNCj4gYSBnb29kIGNhbmRpZGF0ZSB0byBiZSBjb25zdC1p ZmllZCBhcyBpdCBjb250YWlucyBmdW5jdGlvbiBwb2ludGVycy4NCj4gDQo+IFRoaXMgcGF0Y2gg anVzdCByZW1vdmVzIGl0IGFuZCByZXR1cm5zIHplcm8gaW4gdGhlIC9wcm9jIGZpbGUgYXMgdGhl DQo+IGNvdW50IG9mIGNhbGxzIHBlciBwcm9jZWR1cmUgZG9lc24ndCBzZWVtIGFsbCB0aGF0IHVz ZWZ1bC7CoMKgQnV0IGl0J3MNCj4ganVzdCBhIGR1bWIgaGFjayBhbmQgd2UgbWlnaHQgbmVlZCBh IHByb3BlciBmaXggaW5zdGVhZC4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IENocmlzdG9waCBIZWxs d2lnIDxoY2hAbHN0LmRlPg0KPiAtLS0NCj4gDQoNCkZvciBub3csIHdoeSBub3QganVzdCBtb3Zl IGl0IHRvIGEgc2VwYXJhdGUgbm9uLWNvbnN0IHN0cnVjdHVyZSB0aGF0IGlzDQpwb2ludGVkIHRv IGJ5IHRoZSBjb25zdCBvbmU/IFdlIHNob3VsZG4ndCBkZWxpYmVyYXRlbHkgYnJlYWsgbmZzc3Rh dC4uLg0KDQotLSANClRyb25kIE15a2xlYnVzdA0KTGludXggTkZTIGNsaWVudCBtYWludGFpbmVy LCBQcmltYXJ5RGF0YQ0KdHJvbmQubXlrbGVidXN0QHByaW1hcnlkYXRhLmNvbQ0K
Re: [PATCH 29/32] RFC: sunrpc: remove pc_count
Quoted 12 lines · Trond Myklebust
Quoted 10 lines · Christoph Hellwig
pc_countis the only writeable memeber of structsvc_procinfo, which is
a good candidate to be const-ified as it contains function pointers.This patch just removes it and returns zero in the /proc file as the count of calls per procedure doesn't seem all that useful.  But it's just a dumb hack and we might need a proper fix instead.
Quoted 6 lines
Quoted 3 lines
Signed-off-by Christoph Hellwig <[email protected]>---
For now, why not just move it to a separate non-const structure that is pointed to by the const one? We shouldn't deliberately break nfsstat...
Agree on both counts.
Quoted 5 lines
Signature · 4 lines
Trond Myklebust Linux NFS client maintainer, PrimaryData [email protected] N‹§²æìr¸›yúèšØb²X¬¶Ç§vØ^–)Þº{.nÇ+‰·¥Š{±û"žØ^n‡r¡ö¦zËëh™¨èÚ&¢ø®G«éh®(階ŠÝ¢j"ú¶m§ÿïêäz¹Þ–Šàþf£¢·hšˆ§~ˆmš
Re: [PATCH 29/32] RFC: sunrpc: remove pc_count
In reply to Christoph HellwigQuoted 31 lines · Christoph Hellwig
pc_countis the only writeable memeber of structsvc_procinfo, which is a good candidate to be const-ified as it contains function pointers.This patch just removes it and returns zero in the /proc file as the count of calls per procedure doesn't seem all that useful. But it's just a dumb hack and we might need a proper fix instead.
Signed-off-by Christoph Hellwig <[email protected]>--- include/linux/sunrpc/svc.h | 1 - net/sunrpc/stats.c | 2 +- net/sunrpc/svc.c | 3 --- 3 files changed, 1 insertion(+), 5 deletions(-)include/linux/sunrpc/svc.h +0
-1@@ -430,7 +430,6 @@ struct svc_procedure {void (*pc_release)(struct svc_rqst *);unsigned int pc_argsize;/* argument struct size */ unsigned int pc_ressize;/* result struct size */ -unsigned int pc_count;/* call count */ unsigned int pc_cachetype;/* cache info (NFS) */ unsigned int pc_xdrressize;/* maximum size of XDR reply */ };net/sunrpc/stats.c +0
-0
net/sunrpc/stats.c void svc_seq_show(struct seq_file *seq, const struct svc_stat *statp) { · line 105
Quoted 5 lines
net/sunrpc/stats.c +1
-1@@ -102,7 +102,7 @@ void svc_seq_show(struct seq_file *seq, const struct svc_stat *statp) {continue ;seq_printf (seq,"proc%d %u" , i, vers->vs_nproc);for (j =0 ; j < vers->vs_nproc; j++, proc++) -seq_printf (seq," %u" , proc->pc_count); +seq_printf (seq," %u" ,0 );
The rest of the patches also look fine, aside from this one where I agree with Trond and Chuck that we don't want to break nfsstat.
Quoted 8 lines
net/sunrpc/stats.c +0
-0seq_putc (seq,'\n' ); } }net/sunrpc/svc.c +0
-0
net/sunrpc/svc.c svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv) · line 1207
Quoted 9 lines
net/sunrpc/svc.c +0
-3@@ -1202,9 +1202,6 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv) statp = resv->iov_base +resv->iov_len;svc_putnl (resv,RPC_SUCCESS ); -/* Bump per-procedure stats counter */ - procp->pc_count++; -/* Initialize storage for argp and resp */ memset (rqstp->rq_argp,0 , procp->pc_argsize);memset (rqstp->rq_resp,0 , procp->pc_ressize);
Agree with Chuck and Trond's comments on
Signature · 1 line
Jeff Layton <[email protected]>
PATCH 30/32 sunrpc: mark all struct svc_procinfo instances as const
In reply to Christoph Hellwigstruct svc_procinfo contains function pointers, and marking it as constant avoids it being able to be used as an attach vector for code injections.
--- fs/lockd/svc4proc.c | 2 +- fs/lockd/svcproc.c | 2 +- fs/nfs/callback_xdr.c | 2 +- fs/nfsd/nfs2acl.c | 2 +- fs/nfsd/nfs3acl.c | 2 +- fs/nfsd/nfs3proc.c | 2 +- fs/nfsd/nfs4proc.c | 2 +- fs/nfsd/nfsproc.c | 2 +- fs/nfsd/nfssvc.c | 4 ++-- include/linux/lockd/lockd.h | 4 ++-- include/linux/sunrpc/svc.h | 4 ++-- net/sunrpc/svc.c | 2 +- 12 files changed, 15 insertions(+), 15 deletions(-)
fs/lockd/svc4proc.c +1 -1
@@ -507,7 +507,7 @@ struct nlm_void { int dummy; };#define No (1+1024/4)/* netobj */ #define St 1/* status */ #define Rg 4/* range (offset + length) */ -struct svc_procedure nlmsvc_procedures4[] = { +const struct svc_procedure nlmsvc_procedures4[] = {PROC (null, void, void, void, void,1 ),PROC (test, testargs, testres, args, res, Ck+St+2 +No+Rg),PROC (lock, lockargs, res, args, res, Ck+St),
fs/lockd/svcproc.c +1 -1
@@ -551,7 +551,7 @@ struct nlm_void { int dummy; };#define No (1+1024/4)/* Net Obj */ #define Rg 2/* range - offset + size */ -struct svc_procedure nlmsvc_procedures[] = { +const struct svc_procedure nlmsvc_procedures[] = {PROC (null, void, void, void, void,1 ),PROC (test, testargs, testres, args, res, Ck+St+2 +No+Rg),PROC (lock, lockargs, res, args, res, Ck+St),
fs/nfs/callback_xdr.c +1 -1
@@ -1050,7 +1050,7 @@ static struct callback_op callback_ops[] = {/* * Define NFS4 callback procedures */ -static struct svc_procedure nfs4_callback_procedures1[] = { +static const struct svc_procedure nfs4_callback_procedures1[] = { [CB_NULL ] = { .pc_func = nfs4_callback_null, .pc_decode = nfs4_decode_void,
fs/nfsd/nfs2acl.c +1 -1
@@ -370,7 +370,7 @@ struct nfsd3_voidargs { int dummy; };#define pAT (1+AT)/* post attributes - conditional */ #define ACL (1+NFS_ACL_MAX_ENTRIES*3)/* Access Control List */ -static struct svc_procedure nfsd_acl_procedures2[] = { +static const struct svc_procedure nfsd_acl_procedures2[] = {PROC (null, void, void, void,RC_NOCACHE ,ST ),PROC (getacl, getacl, getacl, getacl,RC_NOCACHE ,ST +1 +2 *(1 +ACL )),PROC (setacl, setacl, attrstat, attrstat,RC_NOCACHE ,ST +AT ),
fs/nfsd/nfs3acl.c +1 -1
@@ -257,7 +257,7 @@ struct nfsd3_voidargs { int dummy; };#define pAT (1+AT)/* post attributes - conditional */ #define ACL (1+NFS_ACL_MAX_ENTRIES*3)/* Access Control List */ -static struct svc_procedure nfsd_acl_procedures3[] = { +static const struct svc_procedure nfsd_acl_procedures3[] = {PROC (null, void, void, void,RC_NOCACHE ,ST ),PROC (getacl, getacl, getacl, getacl,RC_NOCACHE ,ST +1 +2 *(1 +ACL )),PROC (setacl, setacl, setacl, fhandle,RC_NOCACHE ,ST +pAT),
fs/nfsd/nfs3proc.c +1 -1
@@ -674,7 +674,7 @@ struct nfsd3_voidargs { int dummy; };#define pAT (1+AT)/* post attributes - conditional */ #define WC (7+pAT)/* WCC attributes */ -static struct svc_procedure nfsd_procedures3[22 ] = { +static const struct svc_procedure nfsd_procedures3[22 ] = { [NFS3PROC_NULL ] = { .pc_func = nfsd3_proc_null, .pc_encode = nfs3svc_encode_voidres,
fs/nfsd/nfs4proc.c +1 -1
@@ -2532,7 +2532,7 @@ static const char *nfsd4_op_name(unsigned opnum)#define nfsd4_voidres nfsd4_voidargsstruct nfsd4_voidargs {int dummy; }; -static struct svc_procedure nfsd_procedures4[2 ] = { +static const struct svc_procedure nfsd_procedures4[2 ] = { [NFSPROC4_NULL ] = { .pc_func = nfsd4_proc_null, .pc_encode = nfs4svc_encode_voidres,
fs/nfsd/nfsproc.c +1 -1
@@ -573,7 +573,7 @@ struct nfsd_void { int dummy; };#define FH 8/* filehandle */ #define AT 18/* attributes */ -static struct svc_procedure nfsd_procedures2[18 ] = { +static const struct svc_procedure nfsd_procedures2[18 ] = { [NFSPROC_NULL ] = { .pc_func = nfsd_proc_null, .pc_decode = nfssvc_decode_void,
fs/nfsd/nfssvc.c +2 -2
@@ -756,7 +756,7 @@ static __be32 map_new_errors(u32 vers, __be32 nfserr)* problem, we enforce these assumptions here: */ static bool nfs_request_too_big (struct svc_rqst *rqstp, -struct svc_procedure *proc) +const struct svc_procedure *proc) {/* * The ACL code has more careful bounds-checking and is not
@@ -781,7 +781,7 @@ static bool nfs_request_too_big(struct svc_rqst *rqstp,int nfsd_dispatch (struct svc_rqst *rqstp,__be32 *statp) { -struct svc_procedure *proc; +const struct svc_procedure *proc;__be32 nfserr;__be32 *nfserrp;
include/linux/lockd/lockd.h +2 -2
@@ -190,9 +190,9 @@ struct nlm_block {* Global variables */ extern const struct rpc_program nlm_program; -extern struct svc_procedure nlmsvc_procedures[]; +extern const struct svc_procedure nlmsvc_procedures[];#ifdef CONFIG_LOCKD_V4 -extern struct svc_procedure nlmsvc_procedures4[]; +extern const struct svc_procedure nlmsvc_procedures4[];#endif extern int nlmsvc_grace_period;extern unsigned long nlmsvc_timeout;
include/linux/sunrpc/svc.h +2 -2
@@ -237,7 +237,7 @@ struct svc_rqst {struct svc_serv * rq_server;/* RPC service definition */ struct svc_pool * rq_pool;/* thread pool */ -struct svc_procedure * rq_procinfo;/* procedure info */ +const struct svc_procedure *rq_procinfo;/* procedure info */ struct auth_ops * rq_authop;/* authentication flavour */ struct svc_cred rq_cred;/* auth info */ void * rq_xprt_ctxt;/* transport specific context ptr */
@@ -397,7 +397,7 @@ struct svc_program {struct svc_version {u32 vs_vers;/* version number */ u32 vs_nproc;/* number of procedures */ -struct svc_procedure * vs_proc;/* per-procedure info */ +const struct svc_procedure *vs_proc;/* per-procedure info */ u32 vs_xdrsize;/* xdrsize needed for this version */ /* Don't register with rpcbind */
net/sunrpc/svc.c +1 -1
@@ -1094,7 +1094,7 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv) {struct svc_program *progp;struct svc_version *versp =NULL ;/* compiler food */ -struct svc_procedure *procp =NULL ; +const struct svc_procedure *procp =NULL ;struct svc_serv *serv = rqstp->rq_server;__be32 *statp;u32 prog, vers, proc;
Signature · 1 line
2.11.0
PATCH 31/32 sunrpc: mark all struct svc_version instances as const
In reply to Christoph Hellwig--- fs/lockd/svc.c | 32 ++++++++++++++++---------------- fs/nfs/callback.c | 2 +- fs/nfs/callback_xdr.c | 4 ++-- fs/nfs/internal.h | 4 ++-- fs/nfs/nfs4_fs.h | 4 ++-- fs/nfsd/nfs2acl.c | 12 ++++++------ fs/nfsd/nfs3acl.c | 12 ++++++------ fs/nfsd/nfs3proc.c | 12 ++++++------ fs/nfsd/nfs4proc.c | 2 +- fs/nfsd/nfsd.h | 6 +++--- fs/nfsd/nfsproc.c | 12 ++++++------ fs/nfsd/nfssvc.c | 8 ++++---- include/linux/sunrpc/svc.h | 2 +- net/sunrpc/svc.c | 4 ++-- 14 files changed, 58 insertions(+), 58 deletions(-)
fs/lockd/svc.c +16 -16
@@ -737,27 +737,27 @@ module_exit(exit_nlm);/* * Define NLM program and procedures */ -static struct svc_version nlmsvc_version1 = { - .vs_vers =1 , - .vs_nproc =17 , - .vs_proc = nlmsvc_procedures, - .vs_xdrsize =NLMSVC_XDRSIZE , +static const struct svc_version nlmsvc_version1 = { + .vs_vers =1 , + .vs_nproc =17 , + .vs_proc = nlmsvc_procedures, + .vs_xdrsize =NLMSVC_XDRSIZE , }; -static struct svc_version nlmsvc_version3 = { - .vs_vers =3 , - .vs_nproc =24 , - .vs_proc = nlmsvc_procedures, - .vs_xdrsize =NLMSVC_XDRSIZE , +static const struct svc_version nlmsvc_version3 = { + .vs_vers =3 , + .vs_nproc =24 , + .vs_proc = nlmsvc_procedures, + .vs_xdrsize =NLMSVC_XDRSIZE , };#ifdef CONFIG_LOCKD_V4 -static struct svc_version nlmsvc_version4 = { - .vs_vers =4 , - .vs_nproc =24 , - .vs_proc = nlmsvc_procedures4, - .vs_xdrsize =NLMSVC_XDRSIZE , +static const struct svc_version nlmsvc_version4 = { + .vs_vers =4 , + .vs_nproc =24 , + .vs_proc = nlmsvc_procedures4, + .vs_xdrsize =NLMSVC_XDRSIZE , };#endif -static struct svc_version * nlmsvc_version[] = { +static const struct svc_version *nlmsvc_version[] = { [1 ] = &nlmsvc_version1, [3 ] = &nlmsvc_version3, #ifdef CONFIG_LOCKD_V4
fs/nfs/callback.c +1 -1
@@ -431,7 +431,7 @@ static int nfs_callback_authenticate(struct svc_rqst *rqstp)/* * Define NFS4 callback program */ -static struct svc_version *nfs4_callback_version[] = { +static const struct svc_version *nfs4_callback_version[] = { [1 ] = &nfs4_callback_version1, [4 ] = &nfs4_callback_version4, };
fs/nfs/callback_xdr.c +2 -2
@@ -1066,7 +1066,7 @@ static const struct svc_procedure nfs4_callback_procedures1[] = { } }; -struct svc_version nfs4_callback_version1 = { +const struct svc_version nfs4_callback_version1 = { .vs_vers =1 , .vs_nproc =ARRAY_SIZE (nfs4_callback_procedures1), .vs_proc = nfs4_callback_procedures1,
@@ -1076,7 +1076,7 @@ struct svc_version nfs4_callback_version1 = { .vs_need_cong_ctrl = true, }; -struct svc_version nfs4_callback_version4 = { +const struct svc_version nfs4_callback_version4 = { .vs_vers =4 , .vs_nproc =ARRAY_SIZE (nfs4_callback_procedures1), .vs_proc = nfs4_callback_procedures1,
fs/nfs/internal.h +2 -2
@@ -225,8 +225,8 @@ static inline void nfs_fs_proc_exit(void)#endif /* callback_xdr.c */ -extern struct svc_version nfs4_callback_version1; -extern struct svc_version nfs4_callback_version4; +extern const struct svc_version nfs4_callback_version1; +extern const struct svc_version nfs4_callback_version4;struct nfs_pageio_descriptor ;/* pagelist.c */
fs/nfs/nfs4_fs.h +2 -2
@@ -498,8 +498,8 @@ extern const struct rpc_procinfo nfs4_procedures[];struct nfs4_mount_data ;/* callback_xdr.c */ -extern struct svc_version nfs4_callback_version1; -extern struct svc_version nfs4_callback_version4; +extern const struct svc_version nfs4_callback_version1; +extern const struct svc_version nfs4_callback_version4;static inline void nfs4_stateid_copy (nfs4_stateid *dst,const nfs4_stateid *src) {
fs/nfsd/nfs2acl.c +6 -6
@@ -378,10 +378,10 @@ static const struct svc_procedure nfsd_acl_procedures2[] = { PROC(access, access, access, access, RC_NOCACHE, ST+AT+1), }; -struct svc_version nfsd_acl_version2 = { - .vs_vers =2 , - .vs_nproc =5 , - .vs_proc = nfsd_acl_procedures2, - .vs_dispatch = nfsd_dispatch, - .vs_xdrsize =NFS3_SVC_XDRSIZE , +const struct svc_version nfsd_acl_version2 = { + .vs_vers =2 , + .vs_nproc =5 , + .vs_proc = nfsd_acl_procedures2, + .vs_dispatch = nfsd_dispatch, + .vs_xdrsize =NFS3_SVC_XDRSIZE , };
fs/nfsd/nfs3acl.c +6 -6
@@ -263,11 +263,11 @@ static const struct svc_procedure nfsd_acl_procedures3[] = { PROC(setacl, setacl, setacl, fhandle, RC_NOCACHE, ST+pAT), }; -struct svc_version nfsd_acl_version3 = { - .vs_vers =3 , - .vs_nproc =3 , - .vs_proc = nfsd_acl_procedures3, - .vs_dispatch = nfsd_dispatch, - .vs_xdrsize =NFS3_SVC_XDRSIZE , +const struct svc_version nfsd_acl_version3 = { + .vs_vers =3 , + .vs_nproc =3 , + .vs_proc = nfsd_acl_procedures3, + .vs_dispatch = nfsd_dispatch, + .vs_xdrsize =NFS3_SVC_XDRSIZE , };
fs/nfsd/nfs3proc.c +6 -6
@@ -890,10 +890,10 @@ static const struct svc_procedure nfsd_procedures3[22] = { }, }; -struct svc_version nfsd_version3 = { - .vs_vers =3 , - .vs_nproc =22 , - .vs_proc = nfsd_procedures3, - .vs_dispatch = nfsd_dispatch, - .vs_xdrsize =NFS3_SVC_XDRSIZE , +const struct svc_version nfsd_version3 = { + .vs_vers =3 , + .vs_nproc =22 , + .vs_proc = nfsd_procedures3, + .vs_dispatch = nfsd_dispatch, + .vs_xdrsize =NFS3_SVC_XDRSIZE , };
fs/nfsd/nfs4proc.c +1 -1
@@ -2553,7 +2553,7 @@ static const struct svc_procedure nfsd_procedures4[2] = { }, }; -struct svc_version nfsd_version4 = { +const struct svc_version nfsd_version4 = { .vs_vers =4 , .vs_nproc =2 , .vs_proc = nfsd_procedures4,
fs/nfsd/nfsd.h +3 -3
@@ -60,7 +60,7 @@ struct readdir_cd {extern struct svc_program nfsd_program; -extern struct svc_version nfsd_version2, nfsd_version3, +extern const struct svc_version nfsd_version2, nfsd_version3, nfsd_version4;extern struct mutex nfsd_mutex;extern spinlock_t nfsd_drc_lock;
@@ -86,12 +86,12 @@ void nfsd_destroy(struct net *net);#if defined(CONFIG_NFSD_V2_ACL ) || defined(CONFIG_NFSD_V3_ACL )#ifdef CONFIG_NFSD_V2_ACL -extern struct svc_version nfsd_acl_version2; +extern const struct svc_version nfsd_acl_version2;#else #define nfsd_acl_version2 NULL#endif #ifdef CONFIG_NFSD_V3_ACL -extern struct svc_version nfsd_acl_version3; +extern const struct svc_version nfsd_acl_version3;#else #define nfsd_acl_version3 NULL#endif
fs/nfsd/nfsproc.c +6 -6
@@ -743,12 +743,12 @@ static const struct svc_procedure nfsd_procedures2[18] = { }; -struct svc_version nfsd_version2 = { - .vs_vers =2 , - .vs_nproc =18 , - .vs_proc = nfsd_procedures2, - .vs_dispatch = nfsd_dispatch, - .vs_xdrsize =NFS2_SVC_XDRSIZE , +const struct svc_version nfsd_version2 = { + .vs_vers =2 , + .vs_nproc =18 , + .vs_proc = nfsd_procedures2, + .vs_dispatch = nfsd_dispatch, + .vs_xdrsize =NFS2_SVC_XDRSIZE , };/*
fs/nfsd/nfssvc.c +4 -4
@@ -68,14 +68,14 @@ unsigned long nfsd_drc_mem_used;#if defined(CONFIG_NFSD_V2_ACL ) || defined(CONFIG_NFSD_V3_ACL )static struct svc_stat nfsd_acl_svcstats; -static struct svc_version * nfsd_acl_version[] = { +static const struct svc_version *nfsd_acl_version[] = { [2 ] = &nfsd_acl_version2, [3 ] = &nfsd_acl_version3, };#define NFSD_ACL_MINVERS 2#define NFSD_ACL_NRVERS ARRAY_SIZE(nfsd_acl_version) -static struct svc_version *nfsd_acl_versions[NFSD_ACL_NRVERS ]; +static const struct svc_version *nfsd_acl_versions[NFSD_ACL_NRVERS ];static struct svc_program nfsd_acl_program = { .pg_prog = NFS_ACL_PROGRAM,
@@ -92,7 +92,7 @@ static struct svc_stat nfsd_acl_svcstats = { };#endif /* defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL) */ -static struct svc_version * nfsd_version[] = { +static const struct svc_version *nfsd_version[] = { [2 ] = &nfsd_version2, #if defined(CONFIG_NFSD_V3) [3] = &nfsd_version3,
@@ -104,7 +104,7 @@ static struct svc_version * nfsd_version[] = {#define NFSD_MINVERS 2#define NFSD_NRVERS ARRAY_SIZE(nfsd_version) -static struct svc_version *nfsd_versions[NFSD_NRVERS ]; +static const struct svc_version *nfsd_versions[NFSD_NRVERS ]; struct svc_program nfsd_program = {#if defined(CONFIG_NFSD_V2_ACL ) || defined(CONFIG_NFSD_V3_ACL )
include/linux/sunrpc/svc.h +1 -1
@@ -384,7 +384,7 @@ struct svc_program {unsigned int pg_lovers;/* lowest version */ unsigned int pg_hivers;/* highest version */ unsigned int pg_nvers;/* number of versions */ -struct svc_version ** pg_vers;/* version array */ +const struct svc_version **pg_vers;/* version array */ char * pg_name;/* service name */ char * pg_class;/* class name: services sharing authentication */ struct svc_stat * pg_stats;/* rpc statistics */
net/sunrpc/svc.c +2 -2
@@ -950,7 +950,7 @@ int svc_register(const struct svc_serv *serv, struct net *net, const unsigned short port) {struct svc_program *progp; -struct svc_version *vers; +const struct svc_version *vers;unsigned int i;int error =0 ;
@@ -1093,7 +1093,7 @@ static int svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv) { struct svc_program *progp; -struct svc_version *versp =NULL ;/* compiler food */ +const struct svc_version *versp =NULL ;/* compiler food */ const struct svc_procedure *procp =NULL ;struct svc_serv *serv = rqstp->rq_server;__be32 *statp;
Signature · 1 line
2.11.0
Re: [PATCH 31/32] sunrpc: mark all struct svc_version instances as const
T24gVHVlLCAyMDE3LTA1LTA5IGF0IDExOjIwICswMjAwLCBDaHJpc3RvcGggSGVsbHdpZyB3cm90 ZToNCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoIEhlbGx3aWcgPGhjaEBsc3QuZGU+DQo+IC0t LQ0KPiDCoGZzL2xvY2tkL3N2Yy5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8IDMyICsrKysr KysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tDQo+IMKgZnMvbmZzL2NhbGxiYWNrLmPCoMKgwqDC oMKgwqDCoMKgwqDCoHzCoMKgMiArLQ0KPiDCoGZzL25mcy9jYWxsYmFja194ZHIuY8KgwqDCoMKg wqDCoHzCoMKgNCArKy0tDQo+IMKgZnMvbmZzL2ludGVybmFsLmjCoMKgwqDCoMKgwqDCoMKgwqDC oHzCoMKgNCArKy0tDQo+IMKgZnMvbmZzL25mczRfZnMuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8 wqDCoDQgKystLQ0KPiDCoGZzL25mc2QvbmZzMmFjbC5jwqDCoMKgwqDCoMKgwqDCoMKgwqB8IDEy ICsrKysrKy0tLS0tLQ0KPiDCoGZzL25mc2QvbmZzM2FjbC5jwqDCoMKgwqDCoMKgwqDCoMKgwqB8 IDEyICsrKysrKy0tLS0tLQ0KPiDCoGZzL25mc2QvbmZzM3Byb2MuY8KgwqDCoMKgwqDCoMKgwqDC oHwgMTIgKysrKysrLS0tLS0tDQo+IMKgZnMvbmZzZC9uZnM0cHJvYy5jwqDCoMKgwqDCoMKgwqDC oMKgfMKgwqAyICstDQo+IMKgZnMvbmZzZC9uZnNkLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHzCoMKgNiArKystLS0NCj4gwqBmcy9uZnNkL25mc3Byb2MuY8KgwqDCoMKgwqDCoMKgwqDCoMKg fCAxMiArKysrKystLS0tLS0NCj4gwqBmcy9uZnNkL25mc3N2Yy5jwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHzCoMKgOCArKysrLS0tLQ0KPiDCoGluY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oIHzCoMKg MiArLQ0KPiDCoG5ldC9zdW5ycGMvc3ZjLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqA0ICsr LS0NCj4gwqAxNCBmaWxlcyBjaGFuZ2VkLCA1OCBpbnNlcnRpb25zKCspLCA1OCBkZWxldGlvbnMo LSkNCj4gDQo+IA0KQWNrZWQtYnk6IFRyb25kIE15a2xlYnVzdCA8dHJvbmQubXlrbGVidXN0QHBy aW1hcnlkYXRhLmNvbT4NCi0tIA0KVHJvbmQgTXlrbGVidXN0DQpMaW51eCBORlMgY2xpZW50IG1h aW50YWluZXIsIFByaW1hcnlEYXRhDQp0cm9uZC5teWtsZWJ1c3RAcHJpbWFyeWRhdGEuY29tDQo=
PATCH 32/32 nfsd4: const-ify nfsd4_ops
In reply to Christoph Hellwignfsd4_ops contains function pointers, and marking it as constant avoids it being able to be used as an attach vector for code injections.
--- fs/nfsd/nfs4proc.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-)
fs/nfsd/nfs4proc.c +6 -7
@@ -1583,7 +1583,7 @@ struct nfsd4_operation { union nfsd4_op_u *); }; -static struct nfsd4_operation nfsd4_ops[]; +static const struct nfsd4_operation nfsd4_ops[];static const char *nfsd4_op_name (unsigned opnum);
@@ -1620,7 +1620,7 @@ static __be32 nfs41_check_op_ordering(struct nfsd4_compoundargs *args)return nfs_ok; } -static inline struct nfsd4_operation *OPDESC (struct nfsd4_op *op) +static inline const struct nfsd4_operation *OPDESC (struct nfsd4_op *op) {return &nfsd4_ops[op->opnum]; }
@@ -1638,10 +1638,9 @@ static bool need_wrongsec_check(struct svc_rqst *rqstp)struct nfsd4_compoundargs *argp = rqstp->rq_argp;struct nfsd4_op *this = &argp->ops[resp->opcnt -1 ];struct nfsd4_op *next = &argp->ops[resp->opcnt]; -struct nfsd4_operation *thisd; -struct nfsd4_operation *nextd; +const struct nfsd4_operation *thisd =OPDESC (this); +const struct nfsd4_operation *nextd; - thisd =OPDESC (this);/* * Most ops check wronsec on our own; only the putfh-like ops * have special rules.
@@ -1694,7 +1693,7 @@ nfsd4_proc_compound(struct svc_rqst *rqstp)struct nfsd4_compoundargs *args = rqstp->rq_argp;struct nfsd4_compoundres *resp = rqstp->rq_resp;struct nfsd4_op *op; -struct nfsd4_operation *opdesc; +const struct nfsd4_operation *opdesc;struct nfsd4_compound_state *cstate = &resp->cstate;struct svc_fh *current_fh = &cstate->current_fh;struct svc_fh *save_fh = &cstate->save_fh;
@@ -2108,7 +2107,7 @@ static inline u32 nfsd4_seek_rsize(struct svc_rqst *rqstp, struct nfsd4_op *op)return (op_encode_hdr_size +3 ) *sizeof (__be32); } -static struct nfsd4_operation nfsd4_ops[] = { +static const struct nfsd4_operation nfsd4_ops[] = { [OP_ACCESS ] = { .op_func = nfsd4_access, .op_name ="OP_ACCESS" ,
Signature · 1 line
2.11.0