[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <063D6719AE5E284EB5DD2968C1650D6D1CAC5844@AcuExch.aculab.com>
Date: Mon, 12 Jan 2015 11:52:45 +0000
From: David Laight <David.Laight@...LAB.COM>
To: 'Yuchung Cheng' <ycheng@...gle.com>,
Eric Dumazet <eric.dumazet@...il.com>
CC: Neal Cardwell <ncardwell@...gle.com>,
Sébastien Barré <sebastien.barre@...ouvain.be>,
David Miller <davem@...emloft.net>,
Netdev <netdev@...r.kernel.org>,
Gregory Detal <gregory.detal@...ouvain.be>,
"Nandita Dukkipati" <nanditad@...gle.com>
Subject: RE: [PATCH net-next v2] tcp: avoid reducing cwnd when ACK+DSACK is
received
From: Yuchung Cheng
> Sent: 09 January 2015 19:44
...
> Sebastien: I suggest breaking down by ACK types for readability. e.g.,
>
> /* This routine deals with acks during a TLP episode.
> * We mark the end of a TLP episode on receiving TLP dupack or when
> * ack is after tlp_high_seq.
> * 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);
>
> if (before(ack, tp->tlp_high_seq))
> return;
>
> if (flag & FLAG_DSACKING_ACK) {
> /* This DSACK means original and TLP probe arrived; no loss */
> tp->tlp_high_seq = 0;
I think I'd add a 'return' here.
> } else if (after(ack, tp->tlp_high_seq)) {
> /* ACK advances: there was a loss, so reduce cwnd. Reset
> * tlp_high_seq in tcp_init_cwnd_reduction()
> */
> tcp_init_cwnd_reduction(sk);
> tcp_set_ca_state(sk, TCP_CA_CWR);
> tcp_end_cwnd_reduction(sk);
> tcp_try_keep_open(sk);
> NET_INC_STATS_BH(sock_net(sk),
> LINUX_MIB_TCPLOSSPROBERECOVERY);
and here
> } else if (!(flag & (FLAG_SND_UNA_ADVANCED |
> FLAG_NOT_DUP | FLAG_DATA_SACKED))) {
> /* Pure dupack: original and TLP probe arrived; no loss */
> tp->tlp_high_seq = 0;
> }
> }
David
Powered by blists - more mailing lists