diff options
Diffstat (limited to 'net/ipv4/tcp.c')
| -rw-r--r-- | net/ipv4/tcp.c | 15 | 
1 files changed, 6 insertions, 9 deletions
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 083092e3aed..e457c7ab2e2 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -830,8 +830,8 @@ static int tcp_send_mss(struct sock *sk, int *size_goal, int flags)  	return mss_now;  } -static ssize_t do_tcp_sendpages(struct sock *sk, struct page **pages, int poffset, -			 size_t psize, int flags) +static ssize_t do_tcp_sendpages(struct sock *sk, struct page *page, int offset, +				size_t size, int flags)  {  	struct tcp_sock *tp = tcp_sk(sk);  	int mss_now, size_goal; @@ -858,12 +858,9 @@ static ssize_t do_tcp_sendpages(struct sock *sk, struct page **pages, int poffse  	if (sk->sk_err || (sk->sk_shutdown & SEND_SHUTDOWN))  		goto out_err; -	while (psize > 0) { +	while (size > 0) {  		struct sk_buff *skb = tcp_write_queue_tail(sk); -		struct page *page = pages[poffset / PAGE_SIZE];  		int copy, i; -		int offset = poffset % PAGE_SIZE; -		int size = min_t(size_t, psize, PAGE_SIZE - offset);  		bool can_coalesce;  		if (!tcp_send_head(sk) || (copy = size_goal - skb->len) <= 0) { @@ -912,8 +909,8 @@ new_segment:  			TCP_SKB_CB(skb)->tcp_flags &= ~TCPHDR_PSH;  		copied += copy; -		poffset += copy; -		if (!(psize -= copy)) +		offset += copy; +		if (!(size -= copy))  			goto out;  		if (skb->len < size_goal || (flags & MSG_OOB)) @@ -960,7 +957,7 @@ int tcp_sendpage(struct sock *sk, struct page *page, int offset,  					flags);  	lock_sock(sk); -	res = do_tcp_sendpages(sk, &page, offset, size, flags); +	res = do_tcp_sendpages(sk, page, offset, size, flags);  	release_sock(sk);  	return res;  }  |