diff options
Diffstat (limited to 'net/sunrpc/svcsock.c')
| -rw-r--r-- | net/sunrpc/svcsock.c | 17 | 
1 files changed, 10 insertions, 7 deletions
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c index 72e5a01df3d3..e1c85123b445 100644 --- a/net/sunrpc/svcsock.c +++ b/net/sunrpc/svcsock.c @@ -713,8 +713,7 @@ static int svc_udp_sendto(struct svc_rqst *rqstp)  	if (svc_xprt_is_dead(xprt))  		goto out_notconn; -	count = xdr_buf_to_bvec(rqstp->rq_bvec, -				ARRAY_SIZE(rqstp->rq_bvec), xdr); +	count = xdr_buf_to_bvec(rqstp->rq_bvec, rqstp->rq_maxpages, xdr);  	iov_iter_bvec(&msg.msg_iter, ITER_SOURCE, rqstp->rq_bvec,  		      count, rqstp->rq_res.len); @@ -1219,8 +1218,8 @@ static int svc_tcp_sendmsg(struct svc_sock *svsk, struct svc_rqst *rqstp,  	memcpy(buf, &marker, sizeof(marker));  	bvec_set_virt(rqstp->rq_bvec, buf, sizeof(marker)); -	count = xdr_buf_to_bvec(rqstp->rq_bvec + 1, -				ARRAY_SIZE(rqstp->rq_bvec) - 1, &rqstp->rq_res); +	count = xdr_buf_to_bvec(rqstp->rq_bvec + 1, rqstp->rq_maxpages, +				&rqstp->rq_res);  	iov_iter_bvec(&msg.msg_iter, ITER_SOURCE, rqstp->rq_bvec,  		      1 + count, sizeof(marker) + rqstp->rq_res.len); @@ -1340,7 +1339,8 @@ static void svc_tcp_init(struct svc_sock *svsk, struct svc_serv *serv)  		svsk->sk_marker = xdr_zero;  		svsk->sk_tcplen = 0;  		svsk->sk_datalen = 0; -		memset(&svsk->sk_pages[0], 0, sizeof(svsk->sk_pages)); +		memset(&svsk->sk_pages[0], 0, +		       svsk->sk_maxpages * sizeof(struct page *));  		tcp_sock_set_nodelay(sk); @@ -1379,10 +1379,13 @@ static struct svc_sock *svc_setup_socket(struct svc_serv *serv,  	struct svc_sock	*svsk;  	struct sock	*inet;  	int		pmap_register = !(flags & SVC_SOCK_ANONYMOUS); +	unsigned long	pages; -	svsk = kzalloc(sizeof(*svsk), GFP_KERNEL); +	pages = svc_serv_maxpages(serv); +	svsk = kzalloc(struct_size(svsk, sk_pages, pages), GFP_KERNEL);  	if (!svsk)  		return ERR_PTR(-ENOMEM); +	svsk->sk_maxpages = pages;  	inet = sock->sk; @@ -1542,7 +1545,7 @@ static struct svc_xprt *svc_create_socket(struct svc_serv *serv,  	if (protocol == IPPROTO_TCP) {  		sk_net_refcnt_upgrade(sock->sk); -		if ((error = kernel_listen(sock, 64)) < 0) +		if ((error = kernel_listen(sock, SOMAXCONN)) < 0)  			goto bummer;  	}  | 
