X-Git-Url: http://git.agner.ch/gitweb/?a=blobdiff_plain;f=net%2Fipv4%2Ftcp_cubic.c;h=448c2615fece946d7b5cc3136941efff92a2edd9;hb=e4fc141d2a022a63c87a4851b3c688eca6a1647b;hp=c6ded6b2a79fb5d8ece3f3b4b1ed0e01707124c3;hpb=42dc2a3048247109b0a5ee6345226cbd3e4f6410;p=linux-drm-fsl-dcu.git 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) static void bictcp_cwnd_event(struct sock *sk, enum tcp_ca_event event) { if (event == CA_EVENT_TX_START) { - s32 delta = tcp_time_stamp - tcp_sk(sk)->lsndtime; struct bictcp *ca = inet_csk_ca(sk); + u32 now = tcp_time_stamp; + s32 delta; + + delta = now - tcp_sk(sk)->lsndtime; /* We were application limited (idle) for a while. * Shift epoch_start to keep cwnd growth to cubic curve. */ - if (ca->epoch_start && delta > 0) + if (ca->epoch_start && delta > 0) { ca->epoch_start += delta; + if (after(ca->epoch_start, now)) + ca->epoch_start = now; + } return; } }