diff options
Diffstat (limited to 'net/ipv4/tcp_cubic.c')
-rw-r--r-- | net/ipv4/tcp_cubic.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/net/ipv4/tcp_cubic.c b/net/ipv4/tcp_cubic.c index c6ded6b2a79f..448c2615fece 100644 --- a/net/ipv4/tcp_cubic.c +++ b/net/ipv4/tcp_cubic.c | |||
@@ -154,14 +154,20 @@ static void bictcp_init(struct sock *sk) | |||
154 | static void bictcp_cwnd_event(struct sock *sk, enum tcp_ca_event event) | 154 | static void bictcp_cwnd_event(struct sock *sk, enum tcp_ca_event event) |
155 | { | 155 | { |
156 | if (event == CA_EVENT_TX_START) { | 156 | if (event == CA_EVENT_TX_START) { |
157 | s32 delta = tcp_time_stamp - tcp_sk(sk)->lsndtime; | ||
158 | struct bictcp *ca = inet_csk_ca(sk); | 157 | struct bictcp *ca = inet_csk_ca(sk); |
158 | u32 now = tcp_time_stamp; | ||
159 | s32 delta; | ||
160 | |||
161 | delta = now - tcp_sk(sk)->lsndtime; | ||
159 | 162 | ||
160 | /* We were application limited (idle) for a while. | 163 | /* We were application limited (idle) for a while. |
161 | * Shift epoch_start to keep cwnd growth to cubic curve. | 164 | * Shift epoch_start to keep cwnd growth to cubic curve. |
162 | */ | 165 | */ |
163 | if (ca->epoch_start && delta > 0) | 166 | if (ca->epoch_start && delta > 0) { |
164 | ca->epoch_start += delta; | 167 | ca->epoch_start += delta; |
168 | if (after(ca->epoch_start, now)) | ||
169 | ca->epoch_start = now; | ||
170 | } | ||
165 | return; | 171 | return; |
166 | } | 172 | } |
167 | } | 173 | } |