diff options
author | Tom Tucker <tom@opengridcomputing.com> | 2007-12-30 22:07:21 -0500 |
---|---|---|
committer | J. Bruce Fields <bfields@citi.umich.edu> | 2008-02-01 16:42:08 -0500 |
commit | 490231558e058547da4ffab6d8ce8e28771749cc (patch) | |
tree | aac2eef69dbd262a755ee1cafec34787faf5d2f0 | |
parent | 9f29868b491beee706931e0cf875a60cb4688754 (diff) |
svc: Add a max payload value to the transport
The svc_max_payload function currently looks at the socket type
to determine the max payload. Add a max payload value to svc_xprt_class
so it can be returned directly.
Signed-off-by: Tom Tucker <tom@opengridcomputing.com>
Acked-by: Neil Brown <neilb@suse.de>
Reviewed-by: Chuck Lever <chuck.lever@oracle.com>
Reviewed-by: Greg Banks <gnb@sgi.com>
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
-rw-r--r-- | include/linux/sunrpc/svc_xprt.h | 1 | ||||
-rw-r--r-- | net/sunrpc/svc.c | 4 | ||||
-rw-r--r-- | net/sunrpc/svcsock.c | 2 |
3 files changed, 4 insertions, 3 deletions
diff --git a/include/linux/sunrpc/svc_xprt.h b/include/linux/sunrpc/svc_xprt.h index fe8e787bb95d..187dc4e2e202 100644 --- a/include/linux/sunrpc/svc_xprt.h +++ b/include/linux/sunrpc/svc_xprt.h | |||
@@ -17,6 +17,7 @@ struct svc_xprt_class { | |||
17 | struct module *xcl_owner; | 17 | struct module *xcl_owner; |
18 | struct svc_xprt_ops *xcl_ops; | 18 | struct svc_xprt_ops *xcl_ops; |
19 | struct list_head xcl_list; | 19 | struct list_head xcl_list; |
20 | u32 xcl_max_payload; | ||
20 | }; | 21 | }; |
21 | 22 | ||
22 | struct svc_xprt { | 23 | struct svc_xprt { |
diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c index 4ad5fbbb18b4..94eed9b80038 100644 --- a/net/sunrpc/svc.c +++ b/net/sunrpc/svc.c | |||
@@ -1055,10 +1055,8 @@ err_bad: | |||
1055 | */ | 1055 | */ |
1056 | u32 svc_max_payload(const struct svc_rqst *rqstp) | 1056 | u32 svc_max_payload(const struct svc_rqst *rqstp) |
1057 | { | 1057 | { |
1058 | int max = RPCSVC_MAXPAYLOAD_TCP; | 1058 | u32 max = rqstp->rq_xprt->xpt_class->xcl_max_payload; |
1059 | 1059 | ||
1060 | if (rqstp->rq_sock->sk_sock->type == SOCK_DGRAM) | ||
1061 | max = RPCSVC_MAXPAYLOAD_UDP; | ||
1062 | if (rqstp->rq_server->sv_max_payload < max) | 1060 | if (rqstp->rq_server->sv_max_payload < max) |
1063 | max = rqstp->rq_server->sv_max_payload; | 1061 | max = rqstp->rq_server->sv_max_payload; |
1064 | return max; | 1062 | return max; |
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c index 54f1b3d993a6..c507f6f8ee54 100644 --- a/net/sunrpc/svcsock.c +++ b/net/sunrpc/svcsock.c | |||
@@ -906,6 +906,7 @@ static struct svc_xprt_ops svc_udp_ops = { | |||
906 | static struct svc_xprt_class svc_udp_class = { | 906 | static struct svc_xprt_class svc_udp_class = { |
907 | .xcl_name = "udp", | 907 | .xcl_name = "udp", |
908 | .xcl_ops = &svc_udp_ops, | 908 | .xcl_ops = &svc_udp_ops, |
909 | .xcl_max_payload = RPCSVC_MAXPAYLOAD_UDP, | ||
909 | }; | 910 | }; |
910 | 911 | ||
911 | static void | 912 | static void |
@@ -1359,6 +1360,7 @@ static struct svc_xprt_ops svc_tcp_ops = { | |||
1359 | static struct svc_xprt_class svc_tcp_class = { | 1360 | static struct svc_xprt_class svc_tcp_class = { |
1360 | .xcl_name = "tcp", | 1361 | .xcl_name = "tcp", |
1361 | .xcl_ops = &svc_tcp_ops, | 1362 | .xcl_ops = &svc_tcp_ops, |
1363 | .xcl_max_payload = RPCSVC_MAXPAYLOAD_TCP, | ||
1362 | }; | 1364 | }; |
1363 | 1365 | ||
1364 | void svc_init_xprt_sock(void) | 1366 | void svc_init_xprt_sock(void) |