diff options
author | Kumar Gala <galak@kernel.crashing.org> | 2011-05-19 00:36:21 -0500 |
---|---|---|
committer | Kumar Gala <galak@kernel.crashing.org> | 2011-05-19 00:36:21 -0500 |
commit | 134c428e5a31f2d5ed3a70ba20dac83895ec8b82 (patch) | |
tree | 0fb28accbf09171b8a1ca792361f4160434529e8 /net/ipv4/tcp_cubic.c | |
parent | a0496d450ab8c17f6c4d86979b1f6ba486fe9365 (diff) | |
parent | c560bbceaf6b06e52f1ef20131b76a3fdc0a2c19 (diff) | |
download | talos-op-linux-134c428e5a31f2d5ed3a70ba20dac83895ec8b82.tar.gz talos-op-linux-134c428e5a31f2d5ed3a70ba20dac83895ec8b82.zip |
Merge remote branch 'benh/merge' into benh-next
Diffstat (limited to 'net/ipv4/tcp_cubic.c')
-rw-r--r-- | net/ipv4/tcp_cubic.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/net/ipv4/tcp_cubic.c b/net/ipv4/tcp_cubic.c index 34340c9c95fa..f376b05cca81 100644 --- a/net/ipv4/tcp_cubic.c +++ b/net/ipv4/tcp_cubic.c @@ -93,6 +93,7 @@ struct bictcp { u32 ack_cnt; /* number of acks */ u32 tcp_cwnd; /* estimated tcp cwnd */ #define ACK_RATIO_SHIFT 4 +#define ACK_RATIO_LIMIT (32u << ACK_RATIO_SHIFT) u16 delayed_ack; /* estimate the ratio of Packets/ACKs << 4 */ u8 sample_cnt; /* number of samples to decide curr_rtt */ u8 found; /* the exit point is found? */ @@ -398,8 +399,12 @@ static void bictcp_acked(struct sock *sk, u32 cnt, s32 rtt_us) u32 delay; if (icsk->icsk_ca_state == TCP_CA_Open) { - cnt -= ca->delayed_ack >> ACK_RATIO_SHIFT; - ca->delayed_ack += cnt; + u32 ratio = ca->delayed_ack; + + ratio -= ca->delayed_ack >> ACK_RATIO_SHIFT; + ratio += cnt; + + ca->delayed_ack = min(ratio, ACK_RATIO_LIMIT); } /* Some calls are for duplicates without timetamps */ |