diff options
-rw-r--r-- | include/linux/sunrpc/xprt.h | 4 | ||||
-rw-r--r-- | net/sunrpc/clnt.c | 10 | ||||
-rw-r--r-- | net/sunrpc/xprtsock.c | 30 |
3 files changed, 19 insertions, 25 deletions
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h index 2543adf18551..99cad3ead81d 100644 --- a/include/linux/sunrpc/xprt.h +++ b/include/linux/sunrpc/xprt.h | |||
@@ -100,7 +100,7 @@ struct rpc_rqst { | |||
100 | #define rq_slen rq_snd_buf.len | 100 | #define rq_slen rq_snd_buf.len |
101 | 101 | ||
102 | struct rpc_xprt_ops { | 102 | struct rpc_xprt_ops { |
103 | void (*set_buffer_size)(struct rpc_xprt *xprt); | 103 | void (*set_buffer_size)(struct rpc_xprt *xprt, size_t sndsize, size_t rcvsize); |
104 | int (*reserve_xprt)(struct rpc_task *task); | 104 | int (*reserve_xprt)(struct rpc_task *task); |
105 | void (*release_xprt)(struct rpc_xprt *xprt, struct rpc_task *task); | 105 | void (*release_xprt)(struct rpc_xprt *xprt, struct rpc_task *task); |
106 | void (*connect)(struct rpc_task *task); | 106 | void (*connect)(struct rpc_task *task); |
@@ -124,7 +124,7 @@ struct rpc_xprt { | |||
124 | unsigned long cong; /* current congestion */ | 124 | unsigned long cong; /* current congestion */ |
125 | unsigned long cwnd; /* congestion window */ | 125 | unsigned long cwnd; /* congestion window */ |
126 | 126 | ||
127 | unsigned int rcvsize, /* transport rcv buffer size */ | 127 | size_t rcvsize, /* transport rcv buffer size */ |
128 | sndsize; /* transport send buffer size */ | 128 | sndsize; /* transport send buffer size */ |
129 | 129 | ||
130 | size_t max_payload; /* largest RPC payload size, | 130 | size_t max_payload; /* largest RPC payload size, |
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index 24b44e73f391..5a8f01d726e9 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c | |||
@@ -517,14 +517,8 @@ void | |||
517 | rpc_setbufsize(struct rpc_clnt *clnt, unsigned int sndsize, unsigned int rcvsize) | 517 | rpc_setbufsize(struct rpc_clnt *clnt, unsigned int sndsize, unsigned int rcvsize) |
518 | { | 518 | { |
519 | struct rpc_xprt *xprt = clnt->cl_xprt; | 519 | struct rpc_xprt *xprt = clnt->cl_xprt; |
520 | 520 | if (xprt->ops->set_buffer_size) | |
521 | xprt->sndsize = 0; | 521 | xprt->ops->set_buffer_size(xprt, sndsize, rcvsize); |
522 | if (sndsize) | ||
523 | xprt->sndsize = sndsize + RPC_SLACK_SPACE; | ||
524 | xprt->rcvsize = 0; | ||
525 | if (rcvsize) | ||
526 | xprt->rcvsize = rcvsize + RPC_SLACK_SPACE; | ||
527 | xprt->ops->set_buffer_size(xprt); | ||
528 | } | 522 | } |
529 | 523 | ||
530 | /* | 524 | /* |
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index 06c2d95484e0..2e1529217e65 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c | |||
@@ -865,15 +865,7 @@ static void xs_tcp_write_space(struct sock *sk) | |||
865 | read_unlock(&sk->sk_callback_lock); | 865 | read_unlock(&sk->sk_callback_lock); |
866 | } | 866 | } |
867 | 867 | ||
868 | /** | 868 | static void xs_udp_do_set_buffer_size(struct rpc_xprt *xprt) |
869 | * xs_udp_set_buffer_size - set send and receive limits | ||
870 | * @xprt: generic transport | ||
871 | * | ||
872 | * Set socket send and receive limits based on the | ||
873 | * sndsize and rcvsize fields in the generic transport | ||
874 | * structure. | ||
875 | */ | ||
876 | static void xs_udp_set_buffer_size(struct rpc_xprt *xprt) | ||
877 | { | 869 | { |
878 | struct sock *sk = xprt->inet; | 870 | struct sock *sk = xprt->inet; |
879 | 871 | ||
@@ -889,14 +881,23 @@ static void xs_udp_set_buffer_size(struct rpc_xprt *xprt) | |||
889 | } | 881 | } |
890 | 882 | ||
891 | /** | 883 | /** |
892 | * xs_tcp_set_buffer_size - set send and receive limits | 884 | * xs_udp_set_buffer_size - set send and receive limits |
893 | * @xprt: generic transport | 885 | * @xprt: generic transport |
886 | * @sndsize: requested size of send buffer, in bytes | ||
887 | * @rcvsize: requested size of receive buffer, in bytes | ||
894 | * | 888 | * |
895 | * Nothing to do for TCP. | 889 | * Set socket send and receive buffer size limits. |
896 | */ | 890 | */ |
897 | static void xs_tcp_set_buffer_size(struct rpc_xprt *xprt) | 891 | static void xs_udp_set_buffer_size(struct rpc_xprt *xprt, size_t sndsize, size_t rcvsize) |
898 | { | 892 | { |
899 | return; | 893 | xprt->sndsize = 0; |
894 | if (sndsize) | ||
895 | xprt->sndsize = sndsize + 1024; | ||
896 | xprt->rcvsize = 0; | ||
897 | if (rcvsize) | ||
898 | xprt->rcvsize = rcvsize + 1024; | ||
899 | |||
900 | xs_udp_do_set_buffer_size(xprt); | ||
900 | } | 901 | } |
901 | 902 | ||
902 | /** | 903 | /** |
@@ -989,7 +990,7 @@ static void xs_udp_connect_worker(void *args) | |||
989 | 990 | ||
990 | write_unlock_bh(&sk->sk_callback_lock); | 991 | write_unlock_bh(&sk->sk_callback_lock); |
991 | } | 992 | } |
992 | xs_udp_set_buffer_size(xprt); | 993 | xs_udp_do_set_buffer_size(xprt); |
993 | status = 0; | 994 | status = 0; |
994 | out: | 995 | out: |
995 | xprt_wake_pending_tasks(xprt, status); | 996 | xprt_wake_pending_tasks(xprt, status); |
@@ -1158,7 +1159,6 @@ static struct rpc_xprt_ops xs_udp_ops = { | |||
1158 | }; | 1159 | }; |
1159 | 1160 | ||
1160 | static struct rpc_xprt_ops xs_tcp_ops = { | 1161 | static struct rpc_xprt_ops xs_tcp_ops = { |
1161 | .set_buffer_size = xs_tcp_set_buffer_size, | ||
1162 | .reserve_xprt = xprt_reserve_xprt, | 1162 | .reserve_xprt = xprt_reserve_xprt, |
1163 | .release_xprt = xprt_release_xprt, | 1163 | .release_xprt = xprt_release_xprt, |
1164 | .connect = xs_connect, | 1164 | .connect = xs_connect, |