linux-next: manual merge of the net-next tree with Linus' tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi all,

Today's linux-next merge of the net-next tree got a conflict in
net/ipv4/tcp_input.c between commit 12fb3dd9dc3c ("tcp: call
tcp_replace_ts_recent() from tcp_ack()") from Linus' tree and commit
9b717a8d2450 ("tcp: TLP loss detection") from the net-next tree.

I fixed it up (see below) and can carry the fix as necessary (no action
is required).

-- 
Cheers,
Stephen Rothwell                    sfr@xxxxxxxxxxxxxxxx

diff --cc net/ipv4/tcp_input.c
index 13b9c08,6d9ca35..0000000
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@@ -108,12 -107,10 +107,11 @@@ int sysctl_tcp_early_retrans __read_mos
  #define FLAG_DATA_SACKED	0x20 /* New SACK.				*/
  #define FLAG_ECE		0x40 /* ECE in this ACK				*/
  #define FLAG_SLOWPATH		0x100 /* Do not skip RFC checks for window update.*/
- #define FLAG_ONLY_ORIG_SACKED	0x200 /* SACKs only non-rexmit sent before RTO */
+ #define FLAG_ORIG_SACK_ACKED	0x200 /* Never retransmitted data are (s)acked	*/
  #define FLAG_SND_UNA_ADVANCED	0x400 /* Snd_una was changed (!= FLAG_DATA_ACKED) */
  #define FLAG_DSACKING_ACK	0x800 /* SACK blocks contained D-SACK info */
- #define FLAG_NONHEAD_RETRANS_ACKED	0x1000 /* Non-head rexmitted data was ACKed */
  #define FLAG_SACK_RENEGING	0x2000 /* snd_una advanced to a sacked seq */
 +#define FLAG_UPDATE_TS_RECENT	0x4000 /* tcp_replace_ts_recent() */
  
  #define FLAG_ACKED		(FLAG_DATA_ACKED|FLAG_SYN_ACKED)
  #define FLAG_NOT_DUP		(FLAG_DATA|FLAG_WIN_UPDATE|FLAG_ACKED)
@@@ -3565,27 -3265,38 +3266,59 @@@ static void tcp_send_challenge_ack(stru
  	}
  }
  
 +static void tcp_store_ts_recent(struct tcp_sock *tp)
 +{
 +	tp->rx_opt.ts_recent = tp->rx_opt.rcv_tsval;
 +	tp->rx_opt.ts_recent_stamp = get_seconds();
 +}
 +
 +static void tcp_replace_ts_recent(struct tcp_sock *tp, u32 seq)
 +{
 +	if (tp->rx_opt.saw_tstamp && !after(seq, tp->rcv_wup)) {
 +		/* PAWS bug workaround wrt. ACK frames, the PAWS discard
 +		 * extra check below makes sure this can only happen
 +		 * for pure ACK frames.  -DaveM
 +		 *
 +		 * Not only, also it occurs for expired timestamps.
 +		 */
 +
 +		if (tcp_paws_check(&tp->rx_opt, 0))
 +			tcp_store_ts_recent(tp);
 +	}
 +}
 +
+ /* This routine deals with acks during a TLP episode.
+  * Ref: loss detection algorithm in draft-dukkipati-tcpm-tcp-loss-probe.
+  */
+ static void tcp_process_tlp_ack(struct sock *sk, u32 ack, int flag)
+ {
+ 	struct tcp_sock *tp = tcp_sk(sk);
+ 	bool is_tlp_dupack = (ack == tp->tlp_high_seq) &&
+ 			     !(flag & (FLAG_SND_UNA_ADVANCED |
+ 				       FLAG_NOT_DUP | FLAG_DATA_SACKED));
+ 
+ 	/* Mark the end of TLP episode on receiving TLP dupack or when
+ 	 * ack is after tlp_high_seq.
+ 	 */
+ 	if (is_tlp_dupack) {
+ 		tp->tlp_high_seq = 0;
+ 		return;
+ 	}
+ 
+ 	if (after(ack, tp->tlp_high_seq)) {
+ 		tp->tlp_high_seq = 0;
+ 		/* Don't reduce cwnd if DSACK arrives for TLP retrans. */
+ 		if (!(flag & FLAG_DSACKING_ACK)) {
+ 			tcp_init_cwnd_reduction(sk, true);
+ 			tcp_set_ca_state(sk, TCP_CA_CWR);
+ 			tcp_end_cwnd_reduction(sk);
+ 			tcp_set_ca_state(sk, TCP_CA_Open);
+ 			NET_INC_STATS_BH(sock_net(sk),
+ 					 LINUX_MIB_TCPLOSSPROBERECOVERY);
+ 		}
+ 	}
+ }
+ 
  /* This routine deals with incoming acks, but not outgoing ones. */
  static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
  {

Attachment: pgp9k5T5E9c1G.pgp
Description: PGP signature


[Index of Archives]     [Linux Kernel]     [Linux USB Development]     [Yosemite News]     [Linux SCSI]

  Powered by Linux