Commit 7c6e066e authored by Chuck Lever's avatar Chuck Lever Committed by Trond Myklebust

SUNRPC: Move the UDP socket bufsize parameters to a private data structure

Move the socket-specific buffer size parameters for UDP sockets to a
private data structure maintained in net/sunrpc/xprtsock.c.
Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent c8475461
...@@ -137,9 +137,6 @@ struct rpc_xprt { ...@@ -137,9 +137,6 @@ struct rpc_xprt {
unsigned long cong; /* current congestion */ unsigned long cong; /* current congestion */
unsigned long cwnd; /* congestion window */ unsigned long cwnd; /* congestion window */
size_t rcvsize, /* transport rcv buffer size */
sndsize; /* transport send buffer size */
size_t max_payload; /* largest RPC payload size, size_t max_payload; /* largest RPC payload size,
in bytes */ in bytes */
unsigned int tsh_size; /* size of transport specific unsigned int tsh_size; /* size of transport specific
......
...@@ -151,6 +151,12 @@ struct sock_xprt { ...@@ -151,6 +151,12 @@ struct sock_xprt {
*/ */
struct work_struct connect_worker; struct work_struct connect_worker;
unsigned short port; unsigned short port;
/*
* UDP socket buffer size parameters
*/
size_t rcvsize,
sndsize;
}; };
/* /*
...@@ -996,13 +1002,13 @@ static void xs_udp_do_set_buffer_size(struct rpc_xprt *xprt) ...@@ -996,13 +1002,13 @@ static void xs_udp_do_set_buffer_size(struct rpc_xprt *xprt)
struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);
struct sock *sk = transport->inet; struct sock *sk = transport->inet;
if (xprt->rcvsize) { if (transport->rcvsize) {
sk->sk_userlocks |= SOCK_RCVBUF_LOCK; sk->sk_userlocks |= SOCK_RCVBUF_LOCK;
sk->sk_rcvbuf = xprt->rcvsize * xprt->max_reqs * 2; sk->sk_rcvbuf = transport->rcvsize * xprt->max_reqs * 2;
} }
if (xprt->sndsize) { if (transport->sndsize) {
sk->sk_userlocks |= SOCK_SNDBUF_LOCK; sk->sk_userlocks |= SOCK_SNDBUF_LOCK;
sk->sk_sndbuf = xprt->sndsize * xprt->max_reqs * 2; sk->sk_sndbuf = transport->sndsize * xprt->max_reqs * 2;
sk->sk_write_space(sk); sk->sk_write_space(sk);
} }
} }
...@@ -1017,12 +1023,14 @@ static void xs_udp_do_set_buffer_size(struct rpc_xprt *xprt) ...@@ -1017,12 +1023,14 @@ static void xs_udp_do_set_buffer_size(struct rpc_xprt *xprt)
*/ */
static void xs_udp_set_buffer_size(struct rpc_xprt *xprt, size_t sndsize, size_t rcvsize) static void xs_udp_set_buffer_size(struct rpc_xprt *xprt, size_t sndsize, size_t rcvsize)
{ {
xprt->sndsize = 0; struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);
transport->sndsize = 0;
if (sndsize) if (sndsize)
xprt->sndsize = sndsize + 1024; transport->sndsize = sndsize + 1024;
xprt->rcvsize = 0; transport->rcvsize = 0;
if (rcvsize) if (rcvsize)
xprt->rcvsize = rcvsize + 1024; transport->rcvsize = rcvsize + 1024;
xs_udp_do_set_buffer_size(xprt); xs_udp_do_set_buffer_size(xprt);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment