diff options
| author | Chris Metcalf <cmetcalf@tilera.com> | 2010-08-06 18:37:02 +0400 | 
|---|---|---|
| committer | Chris Metcalf <cmetcalf@tilera.com> | 2010-08-06 18:37:02 +0400 | 
| commit | ab11b487402f97975f3ac1eeea09c82f4431481e (patch) | |
| tree | 86337c5cbbd2b0c4bd07c0847a1dc7de3d898147 /net/ipv4/tcp_output.c | |
| parent | 1c689cbcf2c2b7a35cd237abddd9206bb1b6fee1 (diff) | |
| parent | fc1caf6eafb30ea185720e29f7f5eccca61ecd60 (diff) | |
| download | linux-ab11b487402f97975f3ac1eeea09c82f4431481e.tar.xz | |
Merge branch 'master' into for-linus
Diffstat (limited to 'net/ipv4/tcp_output.c')
| -rw-r--r-- | net/ipv4/tcp_output.c | 80 | 
1 files changed, 40 insertions, 40 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index b4ed957f201a..de3bd8458588 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -247,6 +247,7 @@ void tcp_select_initial_window(int __space, __u32 mss,  	/* Set the clamp no higher than max representable value */  	(*window_clamp) = min(65535U << (*rcv_wscale), *window_clamp);  } +EXPORT_SYMBOL(tcp_select_initial_window);  /* Chose a new window to advertise, update state in tcp_sock for the   * socket, and return result with RFC1323 scaling applied.  The return @@ -294,9 +295,9 @@ static u16 tcp_select_window(struct sock *sk)  /* Packet ECN state for a SYN-ACK */  static inline void TCP_ECN_send_synack(struct tcp_sock *tp, struct sk_buff *skb)  { -	TCP_SKB_CB(skb)->flags &= ~TCPCB_FLAG_CWR; +	TCP_SKB_CB(skb)->flags &= ~TCPHDR_CWR;  	if (!(tp->ecn_flags & TCP_ECN_OK)) -		TCP_SKB_CB(skb)->flags &= ~TCPCB_FLAG_ECE; +		TCP_SKB_CB(skb)->flags &= ~TCPHDR_ECE;  }  /* Packet ECN state for a SYN.  */ @@ -306,7 +307,7 @@ static inline void TCP_ECN_send_syn(struct sock *sk, struct sk_buff *skb)  	tp->ecn_flags = 0;  	if (sysctl_tcp_ecn == 1) { -		TCP_SKB_CB(skb)->flags |= TCPCB_FLAG_ECE | TCPCB_FLAG_CWR; +		TCP_SKB_CB(skb)->flags |= TCPHDR_ECE | TCPHDR_CWR;  		tp->ecn_flags = TCP_ECN_OK;  	}  } @@ -361,7 +362,7 @@ static void tcp_init_nondata_skb(struct sk_buff *skb, u32 seq, u8 flags)  	skb_shinfo(skb)->gso_type = 0;  	TCP_SKB_CB(skb)->seq = seq; -	if (flags & (TCPCB_FLAG_SYN | TCPCB_FLAG_FIN)) +	if (flags & (TCPHDR_SYN | TCPHDR_FIN))  		seq++;  	TCP_SKB_CB(skb)->end_seq = seq;  } @@ -820,7 +821,7 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,  	tcb = TCP_SKB_CB(skb);  	memset(&opts, 0, sizeof(opts)); -	if (unlikely(tcb->flags & TCPCB_FLAG_SYN)) +	if (unlikely(tcb->flags & TCPHDR_SYN))  		tcp_options_size = tcp_syn_options(sk, skb, &opts, &md5);  	else  		tcp_options_size = tcp_established_options(sk, skb, &opts, @@ -843,7 +844,7 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,  	*(((__be16 *)th) + 6)	= htons(((tcp_header_size >> 2) << 12) |  					tcb->flags); -	if (unlikely(tcb->flags & TCPCB_FLAG_SYN)) { +	if (unlikely(tcb->flags & TCPHDR_SYN)) {  		/* RFC1323: The window in SYN & SYN/ACK segments  		 * is never scaled.  		 */ @@ -866,7 +867,7 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,  	}  	tcp_options_write((__be32 *)(th + 1), tp, &opts); -	if (likely((tcb->flags & TCPCB_FLAG_SYN) == 0)) +	if (likely((tcb->flags & TCPHDR_SYN) == 0))  		TCP_ECN_send(sk, skb, tcp_header_size);  #ifdef CONFIG_TCP_MD5SIG @@ -880,7 +881,7 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,  	icsk->icsk_af_ops->send_check(sk, skb); -	if (likely(tcb->flags & TCPCB_FLAG_ACK)) +	if (likely(tcb->flags & TCPHDR_ACK))  		tcp_event_ack_sent(sk, tcp_skb_pcount(skb));  	if (skb->len != tcp_header_size) @@ -1023,7 +1024,7 @@ int tcp_fragment(struct sock *sk, struct sk_buff *skb, u32 len,  	/* PSH and FIN should only be set in the second packet. */  	flags = TCP_SKB_CB(skb)->flags; -	TCP_SKB_CB(skb)->flags = flags & ~(TCPCB_FLAG_FIN | TCPCB_FLAG_PSH); +	TCP_SKB_CB(skb)->flags = flags & ~(TCPHDR_FIN | TCPHDR_PSH);  	TCP_SKB_CB(buff)->flags = flags;  	TCP_SKB_CB(buff)->sacked = TCP_SKB_CB(skb)->sacked; @@ -1189,6 +1190,7 @@ void tcp_mtup_init(struct sock *sk)  	icsk->icsk_mtup.search_low = tcp_mss_to_mtu(sk, sysctl_tcp_base_mss);  	icsk->icsk_mtup.probe_size = 0;  } +EXPORT_SYMBOL(tcp_mtup_init);  /* This function synchronize snd mss to current pmtu/exthdr set. @@ -1232,6 +1234,7 @@ unsigned int tcp_sync_mss(struct sock *sk, u32 pmtu)  	return mss_now;  } +EXPORT_SYMBOL(tcp_sync_mss);  /* Compute the current effective MSS, taking SACKs and IP options,   * and even PMTU discovery events into account. @@ -1328,8 +1331,7 @@ static inline unsigned int tcp_cwnd_test(struct tcp_sock *tp,  	u32 in_flight, cwnd;  	/* Don't be strict about the congestion window for the final FIN.  */ -	if ((TCP_SKB_CB(skb)->flags & TCPCB_FLAG_FIN) && -	    tcp_skb_pcount(skb) == 1) +	if ((TCP_SKB_CB(skb)->flags & TCPHDR_FIN) && tcp_skb_pcount(skb) == 1)  		return 1;  	in_flight = tcp_packets_in_flight(tp); @@ -1398,7 +1400,7 @@ static inline int tcp_nagle_test(struct tcp_sock *tp, struct sk_buff *skb,  	 * Nagle can be ignored during F-RTO too (see RFC4138).  	 */  	if (tcp_urg_mode(tp) || (tp->frto_counter == 2) || -	    (TCP_SKB_CB(skb)->flags & TCPCB_FLAG_FIN)) +	    (TCP_SKB_CB(skb)->flags & TCPHDR_FIN))  		return 1;  	if (!tcp_nagle_check(tp, skb, cur_mss, nonagle)) @@ -1461,7 +1463,7 @@ int tcp_may_send_now(struct sock *sk)   * packet has never been sent out before (and thus is not cloned).   */  static int tso_fragment(struct sock *sk, struct sk_buff *skb, unsigned int len, -			unsigned int mss_now) +			unsigned int mss_now, gfp_t gfp)  {  	struct sk_buff *buff;  	int nlen = skb->len - len; @@ -1471,7 +1473,7 @@ static int tso_fragment(struct sock *sk, struct sk_buff *skb, unsigned int len,  	if (skb->len != skb->data_len)  		return tcp_fragment(sk, skb, len, mss_now); -	buff = sk_stream_alloc_skb(sk, 0, GFP_ATOMIC); +	buff = sk_stream_alloc_skb(sk, 0, gfp);  	if (unlikely(buff == NULL))  		return -ENOMEM; @@ -1487,7 +1489,7 @@ static int tso_fragment(struct sock *sk, struct sk_buff *skb, unsigned int len,  	/* PSH and FIN should only be set in the second packet. */  	flags = TCP_SKB_CB(skb)->flags; -	TCP_SKB_CB(skb)->flags = flags & ~(TCPCB_FLAG_FIN | TCPCB_FLAG_PSH); +	TCP_SKB_CB(skb)->flags = flags & ~(TCPHDR_FIN | TCPHDR_PSH);  	TCP_SKB_CB(buff)->flags = flags;  	/* This packet was never sent out yet, so no SACK bits. */ @@ -1518,7 +1520,7 @@ static int tcp_tso_should_defer(struct sock *sk, struct sk_buff *skb)  	const struct inet_connection_sock *icsk = inet_csk(sk);  	u32 send_win, cong_win, limit, in_flight; -	if (TCP_SKB_CB(skb)->flags & TCPCB_FLAG_FIN) +	if (TCP_SKB_CB(skb)->flags & TCPHDR_FIN)  		goto send_now;  	if (icsk->icsk_ca_state != TCP_CA_Open) @@ -1644,7 +1646,7 @@ static int tcp_mtu_probe(struct sock *sk)  	TCP_SKB_CB(nskb)->seq = TCP_SKB_CB(skb)->seq;  	TCP_SKB_CB(nskb)->end_seq = TCP_SKB_CB(skb)->seq + probe_size; -	TCP_SKB_CB(nskb)->flags = TCPCB_FLAG_ACK; +	TCP_SKB_CB(nskb)->flags = TCPHDR_ACK;  	TCP_SKB_CB(nskb)->sacked = 0;  	nskb->csum = 0;  	nskb->ip_summed = skb->ip_summed; @@ -1669,7 +1671,7 @@ static int tcp_mtu_probe(struct sock *sk)  			sk_wmem_free_skb(sk, skb);  		} else {  			TCP_SKB_CB(nskb)->flags |= TCP_SKB_CB(skb)->flags & -						   ~(TCPCB_FLAG_FIN|TCPCB_FLAG_PSH); +						   ~(TCPHDR_FIN|TCPHDR_PSH);  			if (!skb_shinfo(skb)->nr_frags) {  				skb_pull(skb, copy);  				if (skb->ip_summed != CHECKSUM_PARTIAL) @@ -1769,7 +1771,7 @@ static int tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle,  						    cwnd_quota);  		if (skb->len > limit && -		    unlikely(tso_fragment(sk, skb, limit, mss_now))) +		    unlikely(tso_fragment(sk, skb, limit, mss_now, gfp)))  			break;  		TCP_SKB_CB(skb)->when = tcp_time_stamp; @@ -2020,7 +2022,7 @@ static void tcp_retrans_try_collapse(struct sock *sk, struct sk_buff *to,  	if (!sysctl_tcp_retrans_collapse)  		return; -	if (TCP_SKB_CB(skb)->flags & TCPCB_FLAG_SYN) +	if (TCP_SKB_CB(skb)->flags & TCPHDR_SYN)  		return;  	tcp_for_write_queue_from_safe(skb, tmp, sk) { @@ -2112,7 +2114,7 @@ int tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb)  	 * since it is cheap to do so and saves bytes on the network.  	 */  	if (skb->len > 0 && -	    (TCP_SKB_CB(skb)->flags & TCPCB_FLAG_FIN) && +	    (TCP_SKB_CB(skb)->flags & TCPHDR_FIN) &&  	    tp->snd_una == (TCP_SKB_CB(skb)->end_seq - 1)) {  		if (!pskb_trim(skb, 0)) {  			/* Reuse, even though it does some unnecessary work */ @@ -2208,6 +2210,9 @@ void tcp_xmit_retransmit_queue(struct sock *sk)  	int mib_idx;  	int fwd_rexmitting = 0; +	if (!tp->packets_out) +		return; +  	if (!tp->lost_out)  		tp->retransmit_high = tp->snd_una; @@ -2301,7 +2306,7 @@ void tcp_send_fin(struct sock *sk)  	mss_now = tcp_current_mss(sk);  	if (tcp_send_head(sk) != NULL) { -		TCP_SKB_CB(skb)->flags |= TCPCB_FLAG_FIN; +		TCP_SKB_CB(skb)->flags |= TCPHDR_FIN;  		TCP_SKB_CB(skb)->end_seq++;  		tp->write_seq++;  	} else { @@ -2318,7 +2323,7 @@ void tcp_send_fin(struct sock *sk)  		skb_reserve(skb, MAX_TCP_HEADER);  		/* FIN eats a sequence byte, write_seq advanced by tcp_queue_skb(). */  		tcp_init_nondata_skb(skb, tp->write_seq, -				     TCPCB_FLAG_ACK | TCPCB_FLAG_FIN); +				     TCPHDR_ACK | TCPHDR_FIN);  		tcp_queue_skb(sk, skb);  	}  	__tcp_push_pending_frames(sk, mss_now, TCP_NAGLE_OFF); @@ -2343,7 +2348,7 @@ void tcp_send_active_reset(struct sock *sk, gfp_t priority)  	/* Reserve space for headers and prepare control bits. */  	skb_reserve(skb, MAX_TCP_HEADER);  	tcp_init_nondata_skb(skb, tcp_acceptable_seq(sk), -			     TCPCB_FLAG_ACK | TCPCB_FLAG_RST); +			     TCPHDR_ACK | TCPHDR_RST);  	/* Send it off. */  	TCP_SKB_CB(skb)->when = tcp_time_stamp;  	if (tcp_transmit_skb(sk, skb, 0, priority)) @@ -2363,11 +2368,11 @@ int tcp_send_synack(struct sock *sk)  	struct sk_buff *skb;  	skb = tcp_write_queue_head(sk); -	if (skb == NULL || !(TCP_SKB_CB(skb)->flags & TCPCB_FLAG_SYN)) { +	if (skb == NULL || !(TCP_SKB_CB(skb)->flags & TCPHDR_SYN)) {  		printk(KERN_DEBUG "tcp_send_synack: wrong queue state\n");  		return -EFAULT;  	} -	if (!(TCP_SKB_CB(skb)->flags & TCPCB_FLAG_ACK)) { +	if (!(TCP_SKB_CB(skb)->flags & TCPHDR_ACK)) {  		if (skb_cloned(skb)) {  			struct sk_buff *nskb = skb_copy(skb, GFP_ATOMIC);  			if (nskb == NULL) @@ -2381,7 +2386,7 @@ int tcp_send_synack(struct sock *sk)  			skb = nskb;  		} -		TCP_SKB_CB(skb)->flags |= TCPCB_FLAG_ACK; +		TCP_SKB_CB(skb)->flags |= TCPHDR_ACK;  		TCP_ECN_send_synack(tcp_sk(sk), skb);  	}  	TCP_SKB_CB(skb)->when = tcp_time_stamp; @@ -2460,7 +2465,7 @@ struct sk_buff *tcp_make_synack(struct sock *sk, struct dst_entry *dst,  	 * not even correctly set)  	 */  	tcp_init_nondata_skb(skb, tcp_rsk(req)->snt_isn, -			     TCPCB_FLAG_SYN | TCPCB_FLAG_ACK); +			     TCPHDR_SYN | TCPHDR_ACK);  	if (OPTION_COOKIE_EXTENSION & opts.options) {  		if (s_data_desired) { @@ -2515,6 +2520,7 @@ struct sk_buff *tcp_make_synack(struct sock *sk, struct dst_entry *dst,  	return skb;  } +EXPORT_SYMBOL(tcp_make_synack);  /* Do all connect socket setups that can be done AF independent. */  static void tcp_connect_init(struct sock *sk) @@ -2592,7 +2598,7 @@ int tcp_connect(struct sock *sk)  	skb_reserve(buff, MAX_TCP_HEADER);  	tp->snd_nxt = tp->write_seq; -	tcp_init_nondata_skb(buff, tp->write_seq++, TCPCB_FLAG_SYN); +	tcp_init_nondata_skb(buff, tp->write_seq++, TCPHDR_SYN);  	TCP_ECN_send_syn(sk, buff);  	/* Send it off. */ @@ -2617,6 +2623,7 @@ int tcp_connect(struct sock *sk)  				  inet_csk(sk)->icsk_rto, TCP_RTO_MAX);  	return 0;  } +EXPORT_SYMBOL(tcp_connect);  /* Send out a delayed ack, the caller does the policy checking   * to see if we should even be here.  See tcp_input.c:tcp_ack_snd_check() @@ -2698,7 +2705,7 @@ void tcp_send_ack(struct sock *sk)  	/* Reserve space for headers and prepare control bits. */  	skb_reserve(buff, MAX_TCP_HEADER); -	tcp_init_nondata_skb(buff, tcp_acceptable_seq(sk), TCPCB_FLAG_ACK); +	tcp_init_nondata_skb(buff, tcp_acceptable_seq(sk), TCPHDR_ACK);  	/* Send it off, this clears delayed acks for us. */  	TCP_SKB_CB(buff)->when = tcp_time_stamp; @@ -2732,7 +2739,7 @@ static int tcp_xmit_probe_skb(struct sock *sk, int urgent)  	 * end to send an ack.  Don't queue or clone SKB, just  	 * send it.  	 */ -	tcp_init_nondata_skb(skb, tp->snd_una - !urgent, TCPCB_FLAG_ACK); +	tcp_init_nondata_skb(skb, tp->snd_una - !urgent, TCPHDR_ACK);  	TCP_SKB_CB(skb)->when = tcp_time_stamp;  	return tcp_transmit_skb(sk, skb, 0, GFP_ATOMIC);  } @@ -2762,13 +2769,13 @@ int tcp_write_wakeup(struct sock *sk)  		if (seg_size < TCP_SKB_CB(skb)->end_seq - TCP_SKB_CB(skb)->seq ||  		    skb->len > mss) {  			seg_size = min(seg_size, mss); -			TCP_SKB_CB(skb)->flags |= TCPCB_FLAG_PSH; +			TCP_SKB_CB(skb)->flags |= TCPHDR_PSH;  			if (tcp_fragment(sk, skb, seg_size, mss))  				return -1;  		} else if (!tcp_skb_pcount(skb))  			tcp_set_skb_tso_segs(sk, skb, mss); -		TCP_SKB_CB(skb)->flags |= TCPCB_FLAG_PSH; +		TCP_SKB_CB(skb)->flags |= TCPHDR_PSH;  		TCP_SKB_CB(skb)->when = tcp_time_stamp;  		err = tcp_transmit_skb(sk, skb, 1, GFP_ATOMIC);  		if (!err) @@ -2821,10 +2828,3 @@ void tcp_send_probe0(struct sock *sk)  					  TCP_RTO_MAX);  	}  } - -EXPORT_SYMBOL(tcp_select_initial_window); -EXPORT_SYMBOL(tcp_connect); -EXPORT_SYMBOL(tcp_make_synack); -EXPORT_SYMBOL(tcp_simple_retransmit); -EXPORT_SYMBOL(tcp_sync_mss); -EXPORT_SYMBOL(tcp_mtup_init);  | 
