mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-02 15:18:19 +00:00
[PATCH] RPC: rationalize set_buffer_size
In fact, ->set_buffer_size should be completely functionless for non-UDP. Test-plan: Check socket buffer size on UDP sockets over time. Signed-off-by: Chuck Lever <cel@netapp.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
03bf4b707e
commit
470056c288
3 changed files with 19 additions and 25 deletions
|
@ -100,7 +100,7 @@ struct rpc_rqst {
|
||||||
#define rq_slen rq_snd_buf.len
|
#define rq_slen rq_snd_buf.len
|
||||||
|
|
||||||
struct rpc_xprt_ops {
|
struct rpc_xprt_ops {
|
||||||
void (*set_buffer_size)(struct rpc_xprt *xprt);
|
void (*set_buffer_size)(struct rpc_xprt *xprt, size_t sndsize, size_t rcvsize);
|
||||||
int (*reserve_xprt)(struct rpc_task *task);
|
int (*reserve_xprt)(struct rpc_task *task);
|
||||||
void (*release_xprt)(struct rpc_xprt *xprt, struct rpc_task *task);
|
void (*release_xprt)(struct rpc_xprt *xprt, struct rpc_task *task);
|
||||||
void (*connect)(struct rpc_task *task);
|
void (*connect)(struct rpc_task *task);
|
||||||
|
@ -124,7 +124,7 @@ struct rpc_xprt {
|
||||||
unsigned long cong; /* current congestion */
|
unsigned long cong; /* current congestion */
|
||||||
unsigned long cwnd; /* congestion window */
|
unsigned long cwnd; /* congestion window */
|
||||||
|
|
||||||
unsigned int rcvsize, /* transport rcv buffer size */
|
size_t rcvsize, /* transport rcv buffer size */
|
||||||
sndsize; /* transport send buffer size */
|
sndsize; /* transport send buffer size */
|
||||||
|
|
||||||
size_t max_payload; /* largest RPC payload size,
|
size_t max_payload; /* largest RPC payload size,
|
||||||
|
|
|
@ -517,14 +517,8 @@ void
|
||||||
rpc_setbufsize(struct rpc_clnt *clnt, unsigned int sndsize, unsigned int rcvsize)
|
rpc_setbufsize(struct rpc_clnt *clnt, unsigned int sndsize, unsigned int rcvsize)
|
||||||
{
|
{
|
||||||
struct rpc_xprt *xprt = clnt->cl_xprt;
|
struct rpc_xprt *xprt = clnt->cl_xprt;
|
||||||
|
if (xprt->ops->set_buffer_size)
|
||||||
xprt->sndsize = 0;
|
xprt->ops->set_buffer_size(xprt, sndsize, rcvsize);
|
||||||
if (sndsize)
|
|
||||||
xprt->sndsize = sndsize + RPC_SLACK_SPACE;
|
|
||||||
xprt->rcvsize = 0;
|
|
||||||
if (rcvsize)
|
|
||||||
xprt->rcvsize = rcvsize + RPC_SLACK_SPACE;
|
|
||||||
xprt->ops->set_buffer_size(xprt);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -865,15 +865,7 @@ static void xs_tcp_write_space(struct sock *sk)
|
||||||
read_unlock(&sk->sk_callback_lock);
|
read_unlock(&sk->sk_callback_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
static void xs_udp_do_set_buffer_size(struct rpc_xprt *xprt)
|
||||||
* xs_udp_set_buffer_size - set send and receive limits
|
|
||||||
* @xprt: generic transport
|
|
||||||
*
|
|
||||||
* Set socket send and receive limits based on the
|
|
||||||
* sndsize and rcvsize fields in the generic transport
|
|
||||||
* structure.
|
|
||||||
*/
|
|
||||||
static void xs_udp_set_buffer_size(struct rpc_xprt *xprt)
|
|
||||||
{
|
{
|
||||||
struct sock *sk = xprt->inet;
|
struct sock *sk = xprt->inet;
|
||||||
|
|
||||||
|
@ -889,14 +881,23 @@ static void xs_udp_set_buffer_size(struct rpc_xprt *xprt)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* xs_tcp_set_buffer_size - set send and receive limits
|
* xs_udp_set_buffer_size - set send and receive limits
|
||||||
* @xprt: generic transport
|
* @xprt: generic transport
|
||||||
|
* @sndsize: requested size of send buffer, in bytes
|
||||||
|
* @rcvsize: requested size of receive buffer, in bytes
|
||||||
*
|
*
|
||||||
* Nothing to do for TCP.
|
* Set socket send and receive buffer size limits.
|
||||||
*/
|
*/
|
||||||
static void xs_tcp_set_buffer_size(struct rpc_xprt *xprt)
|
static void xs_udp_set_buffer_size(struct rpc_xprt *xprt, size_t sndsize, size_t rcvsize)
|
||||||
{
|
{
|
||||||
return;
|
xprt->sndsize = 0;
|
||||||
|
if (sndsize)
|
||||||
|
xprt->sndsize = sndsize + 1024;
|
||||||
|
xprt->rcvsize = 0;
|
||||||
|
if (rcvsize)
|
||||||
|
xprt->rcvsize = rcvsize + 1024;
|
||||||
|
|
||||||
|
xs_udp_do_set_buffer_size(xprt);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -989,7 +990,7 @@ static void xs_udp_connect_worker(void *args)
|
||||||
|
|
||||||
write_unlock_bh(&sk->sk_callback_lock);
|
write_unlock_bh(&sk->sk_callback_lock);
|
||||||
}
|
}
|
||||||
xs_udp_set_buffer_size(xprt);
|
xs_udp_do_set_buffer_size(xprt);
|
||||||
status = 0;
|
status = 0;
|
||||||
out:
|
out:
|
||||||
xprt_wake_pending_tasks(xprt, status);
|
xprt_wake_pending_tasks(xprt, status);
|
||||||
|
@ -1158,7 +1159,6 @@ static struct rpc_xprt_ops xs_udp_ops = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct rpc_xprt_ops xs_tcp_ops = {
|
static struct rpc_xprt_ops xs_tcp_ops = {
|
||||||
.set_buffer_size = xs_tcp_set_buffer_size,
|
|
||||||
.reserve_xprt = xprt_reserve_xprt,
|
.reserve_xprt = xprt_reserve_xprt,
|
||||||
.release_xprt = xprt_release_xprt,
|
.release_xprt = xprt_release_xprt,
|
||||||
.connect = xs_connect,
|
.connect = xs_connect,
|
||||||
|
|
Loading…
Reference in a new issue