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: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
c847546182
commit
7c6e066ec2
@ -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 {
|
|||||||
*/
|
*/
|
||||||
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)
|
|||||||
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)
|
|||||||
*/
|
*/
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user