提交 470056c2 编写于 作者: C Chuck Lever 提交者: Trond Myklebust

[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: NChuck Lever <cel@netapp.com>
Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
上级 03bf4b70
...@@ -100,7 +100,7 @@ struct rpc_rqst { ...@@ -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 { ...@@ -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 ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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 = { ...@@ -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,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册