|
@@ -345,7 +345,6 @@ static void svc_sock_setbufsize(struct socket *sock, unsigned int snd,
|
|
lock_sock(sock->sk);
|
|
lock_sock(sock->sk);
|
|
sock->sk->sk_sndbuf = snd * 2;
|
|
sock->sk->sk_sndbuf = snd * 2;
|
|
sock->sk->sk_rcvbuf = rcv * 2;
|
|
sock->sk->sk_rcvbuf = rcv * 2;
|
|
- sock->sk->sk_userlocks |= SOCK_SNDBUF_LOCK|SOCK_RCVBUF_LOCK;
|
|
|
|
release_sock(sock->sk);
|
|
release_sock(sock->sk);
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
@@ -797,23 +796,6 @@ static int svc_tcp_recvfrom(struct svc_rqst *rqstp)
|
|
test_bit(XPT_CONN, &svsk->sk_xprt.xpt_flags),
|
|
test_bit(XPT_CONN, &svsk->sk_xprt.xpt_flags),
|
|
test_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags));
|
|
test_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags));
|
|
|
|
|
|
- if (test_and_clear_bit(XPT_CHNGBUF, &svsk->sk_xprt.xpt_flags))
|
|
|
|
- /* sndbuf needs to have room for one request
|
|
|
|
- * per thread, otherwise we can stall even when the
|
|
|
|
- * network isn't a bottleneck.
|
|
|
|
- *
|
|
|
|
- * We count all threads rather than threads in a
|
|
|
|
- * particular pool, which provides an upper bound
|
|
|
|
- * on the number of threads which will access the socket.
|
|
|
|
- *
|
|
|
|
- * rcvbuf just needs to be able to hold a few requests.
|
|
|
|
- * Normally they will be removed from the queue
|
|
|
|
- * as soon a a complete request arrives.
|
|
|
|
- */
|
|
|
|
- svc_sock_setbufsize(svsk->sk_sock,
|
|
|
|
- (serv->sv_nrthreads+3) * serv->sv_max_mesg,
|
|
|
|
- 3 * serv->sv_max_mesg);
|
|
|
|
-
|
|
|
|
clear_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags);
|
|
clear_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags);
|
|
|
|
|
|
/* Receive data. If we haven't got the record length yet, get
|
|
/* Receive data. If we haven't got the record length yet, get
|
|
@@ -1061,15 +1043,6 @@ static void svc_tcp_init(struct svc_sock *svsk, struct svc_serv *serv)
|
|
|
|
|
|
tcp_sk(sk)->nonagle |= TCP_NAGLE_OFF;
|
|
tcp_sk(sk)->nonagle |= TCP_NAGLE_OFF;
|
|
|
|
|
|
- /* initialise setting must have enough space to
|
|
|
|
- * receive and respond to one request.
|
|
|
|
- * svc_tcp_recvfrom will re-adjust if necessary
|
|
|
|
- */
|
|
|
|
- svc_sock_setbufsize(svsk->sk_sock,
|
|
|
|
- 3 * svsk->sk_xprt.xpt_server->sv_max_mesg,
|
|
|
|
- 3 * svsk->sk_xprt.xpt_server->sv_max_mesg);
|
|
|
|
-
|
|
|
|
- set_bit(XPT_CHNGBUF, &svsk->sk_xprt.xpt_flags);
|
|
|
|
set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags);
|
|
set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags);
|
|
if (sk->sk_state != TCP_ESTABLISHED)
|
|
if (sk->sk_state != TCP_ESTABLISHED)
|
|
set_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags);
|
|
set_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags);
|
|
@@ -1140,8 +1113,14 @@ static struct svc_sock *svc_setup_socket(struct svc_serv *serv,
|
|
/* Initialize the socket */
|
|
/* Initialize the socket */
|
|
if (sock->type == SOCK_DGRAM)
|
|
if (sock->type == SOCK_DGRAM)
|
|
svc_udp_init(svsk, serv);
|
|
svc_udp_init(svsk, serv);
|
|
- else
|
|
|
|
|
|
+ else {
|
|
|
|
+ /* initialise setting must have enough space to
|
|
|
|
+ * receive and respond to one request.
|
|
|
|
+ */
|
|
|
|
+ svc_sock_setbufsize(svsk->sk_sock, 4 * serv->sv_max_mesg,
|
|
|
|
+ 4 * serv->sv_max_mesg);
|
|
svc_tcp_init(svsk, serv);
|
|
svc_tcp_init(svsk, serv);
|
|
|
|
+ }
|
|
|
|
|
|
/*
|
|
/*
|
|
* We start one listener per sv_serv. We want AF_INET
|
|
* We start one listener per sv_serv. We want AF_INET
|