diff options
Diffstat (limited to 'net/ipv4/tcp.c')
| -rw-r--r-- | net/ipv4/tcp.c | 15 | 
1 files changed, 7 insertions, 8 deletions
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 5d54ed30e82..8bb6adeb62c 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -701,11 +701,12 @@ struct sk_buff *sk_stream_alloc_skb(struct sock *sk, int size, gfp_t gfp)  	skb = alloc_skb_fclone(size + sk->sk_prot->max_header, gfp);  	if (skb) {  		if (sk_wmem_schedule(sk, skb->truesize)) { +			skb_reserve(skb, sk->sk_prot->max_header);  			/*  			 * Make sure that we have exactly size bytes  			 * available to the caller, no more, no less.  			 */ -			skb_reserve(skb, skb_tailroom(skb) - size); +			skb->avail_size = size;  			return skb;  		}  		__kfree_skb(skb); @@ -995,10 +996,9 @@ new_segment:  				copy = seglen;  			/* Where to copy to? */ -			if (skb_tailroom(skb) > 0) { +			if (skb_availroom(skb) > 0) {  				/* We have some space in skb head. Superb! */ -				if (copy > skb_tailroom(skb)) -					copy = skb_tailroom(skb); +				copy = min_t(int, copy, skb_availroom(skb));  				err = skb_add_data_nocache(sk, skb, from, copy);  				if (err)  					goto do_fault; @@ -1452,7 +1452,7 @@ int tcp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,  		if ((available < target) &&  		    (len > sysctl_tcp_dma_copybreak) && !(flags & MSG_PEEK) &&  		    !sysctl_tcp_low_latency && -		    dma_find_channel(DMA_MEMCPY)) { +		    net_dma_find_channel()) {  			preempt_enable_no_resched();  			tp->ucopy.pinned_list =  					dma_pin_iovec_pages(msg->msg_iov, len); @@ -1667,7 +1667,7 @@ do_prequeue:  		if (!(flags & MSG_TRUNC)) {  #ifdef CONFIG_NET_DMA  			if (!tp->ucopy.dma_chan && tp->ucopy.pinned_list) -				tp->ucopy.dma_chan = dma_find_channel(DMA_MEMCPY); +				tp->ucopy.dma_chan = net_dma_find_channel();  			if (tp->ucopy.dma_chan) {  				tp->ucopy.dma_cookie = dma_skb_copy_datagram_iovec( @@ -3302,8 +3302,7 @@ void __init tcp_init(void)  	tcp_init_mem(&init_net);  	/* Set per-socket limits to no more than 1/128 the pressure threshold */ -	limit = nr_free_buffer_pages() << (PAGE_SHIFT - 10); -	limit = max(limit, 128UL); +	limit = nr_free_buffer_pages() << (PAGE_SHIFT - 7);  	max_share = min(4UL*1024*1024, limit);  	sysctl_tcp_wmem[0] = SK_MEM_QUANTUM;  |