|
@@ -107,7 +107,6 @@ static inline void bictcp_reset(struct bictcp *ca)
|
|
|
{
|
|
|
ca->cnt = 0;
|
|
|
ca->last_max_cwnd = 0;
|
|
|
- ca->loss_cwnd = 0;
|
|
|
ca->last_cwnd = 0;
|
|
|
ca->last_time = 0;
|
|
|
ca->bic_origin_point = 0;
|
|
@@ -142,7 +141,10 @@ static inline void bictcp_hystart_reset(struct sock *sk)
|
|
|
|
|
|
static void bictcp_init(struct sock *sk)
|
|
|
{
|
|
|
- bictcp_reset(inet_csk_ca(sk));
|
|
|
+ struct bictcp *ca = inet_csk_ca(sk);
|
|
|
+
|
|
|
+ bictcp_reset(ca);
|
|
|
+ ca->loss_cwnd = 0;
|
|
|
|
|
|
if (hystart)
|
|
|
bictcp_hystart_reset(sk);
|
|
@@ -275,7 +277,7 @@ static inline void bictcp_update(struct bictcp *ca, u32 cwnd)
|
|
|
* The initial growth of cubic function may be too conservative
|
|
|
* when the available bandwidth is still unknown.
|
|
|
*/
|
|
|
- if (ca->loss_cwnd == 0 && ca->cnt > 20)
|
|
|
+ if (ca->last_max_cwnd == 0 && ca->cnt > 20)
|
|
|
ca->cnt = 20; /* increase cwnd 5% per RTT */
|
|
|
|
|
|
/* TCP Friendly */
|
|
@@ -342,7 +344,7 @@ static u32 bictcp_undo_cwnd(struct sock *sk)
|
|
|
{
|
|
|
struct bictcp *ca = inet_csk_ca(sk);
|
|
|
|
|
|
- return max(tcp_sk(sk)->snd_cwnd, ca->last_max_cwnd);
|
|
|
+ return max(tcp_sk(sk)->snd_cwnd, ca->loss_cwnd);
|
|
|
}
|
|
|
|
|
|
static void bictcp_state(struct sock *sk, u8 new_state)
|