diff options
Diffstat (limited to 'net/sunrpc/svcsock.c')
-rw-r--r-- | net/sunrpc/svcsock.c | 35 |
1 files changed, 7 insertions, 28 deletions
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c index a4fafcbc6ea0..213dea8b283c 100644 --- a/net/sunrpc/svcsock.c +++ b/net/sunrpc/svcsock.c | |||
@@ -436,7 +436,6 @@ static void svc_sock_setbufsize(struct socket *sock, unsigned int snd, | |||
436 | lock_sock(sock->sk); | 436 | lock_sock(sock->sk); |
437 | sock->sk->sk_sndbuf = snd * 2; | 437 | sock->sk->sk_sndbuf = snd * 2; |
438 | sock->sk->sk_rcvbuf = rcv * 2; | 438 | sock->sk->sk_rcvbuf = rcv * 2; |
439 | sock->sk->sk_userlocks |= SOCK_SNDBUF_LOCK|SOCK_RCVBUF_LOCK; | ||
440 | sock->sk->sk_write_space(sock->sk); | 439 | sock->sk->sk_write_space(sock->sk); |
441 | release_sock(sock->sk); | 440 | release_sock(sock->sk); |
442 | #endif | 441 | #endif |
@@ -973,23 +972,6 @@ static int svc_tcp_recv_record(struct svc_sock *svsk, struct svc_rqst *rqstp) | |||
973 | unsigned int want; | 972 | unsigned int want; |
974 | int len; | 973 | int len; |
975 | 974 | ||
976 | if (test_and_clear_bit(XPT_CHNGBUF, &svsk->sk_xprt.xpt_flags)) | ||
977 | /* sndbuf needs to have room for one request | ||
978 | * per thread, otherwise we can stall even when the | ||
979 | * network isn't a bottleneck. | ||
980 | * | ||
981 | * We count all threads rather than threads in a | ||
982 | * particular pool, which provides an upper bound | ||
983 | * on the number of threads which will access the socket. | ||
984 | * | ||
985 | * rcvbuf just needs to be able to hold a few requests. | ||
986 | * Normally they will be removed from the queue | ||
987 | * as soon a a complete request arrives. | ||
988 | */ | ||
989 | svc_sock_setbufsize(svsk->sk_sock, | ||
990 | (serv->sv_nrthreads+3) * serv->sv_max_mesg, | ||
991 | 3 * serv->sv_max_mesg); | ||
992 | |||
993 | clear_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); | 975 | clear_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); |
994 | 976 | ||
995 | if (svsk->sk_tcplen < sizeof(rpc_fraghdr)) { | 977 | if (svsk->sk_tcplen < sizeof(rpc_fraghdr)) { |
@@ -1367,15 +1349,6 @@ static void svc_tcp_init(struct svc_sock *svsk, struct svc_serv *serv) | |||
1367 | 1349 | ||
1368 | tcp_sk(sk)->nonagle |= TCP_NAGLE_OFF; | 1350 | tcp_sk(sk)->nonagle |= TCP_NAGLE_OFF; |
1369 | 1351 | ||
1370 | /* initialise setting must have enough space to | ||
1371 | * receive and respond to one request. | ||
1372 | * svc_tcp_recvfrom will re-adjust if necessary | ||
1373 | */ | ||
1374 | svc_sock_setbufsize(svsk->sk_sock, | ||
1375 | 3 * svsk->sk_xprt.xpt_server->sv_max_mesg, | ||
1376 | 3 * svsk->sk_xprt.xpt_server->sv_max_mesg); | ||
1377 | |||
1378 | set_bit(XPT_CHNGBUF, &svsk->sk_xprt.xpt_flags); | ||
1379 | set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); | 1352 | set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); |
1380 | if (sk->sk_state != TCP_ESTABLISHED) | 1353 | if (sk->sk_state != TCP_ESTABLISHED) |
1381 | set_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags); | 1354 | set_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags); |
@@ -1439,8 +1412,14 @@ static struct svc_sock *svc_setup_socket(struct svc_serv *serv, | |||
1439 | /* Initialize the socket */ | 1412 | /* Initialize the socket */ |
1440 | if (sock->type == SOCK_DGRAM) | 1413 | if (sock->type == SOCK_DGRAM) |
1441 | svc_udp_init(svsk, serv); | 1414 | svc_udp_init(svsk, serv); |
1442 | else | 1415 | else { |
1416 | /* initialise setting must have enough space to | ||
1417 | * receive and respond to one request. | ||
1418 | */ | ||
1419 | svc_sock_setbufsize(svsk->sk_sock, 4 * serv->sv_max_mesg, | ||
1420 | 4 * serv->sv_max_mesg); | ||
1443 | svc_tcp_init(svsk, serv); | 1421 | svc_tcp_init(svsk, serv); |
1422 | } | ||
1444 | 1423 | ||
1445 | dprintk("svc: svc_setup_socket created %p (inet %p)\n", | 1424 | dprintk("svc: svc_setup_socket created %p (inet %p)\n", |
1446 | svsk, svsk->sk_sk); | 1425 | svsk, svsk->sk_sk); |