return max(tp->snd_cwnd >> 1U, 2U);
}
+static inline void tcp_set_ca_state(struct tcp_opt *tp, u8 ca_state)
+{
+ tp->ca_state = ca_state;
+}
+
/* If cwnd > ssthresh, we may raise ssthresh to be half-way to cwnd.
* The exception is rate halving phase, when cwnd is decreasing towards
* ssthresh.
tp->prior_ssthresh = 0;
if (tp->ca_state < TCP_CA_CWR) {
__tcp_enter_cwr(tp);
- tp->ca_state = TCP_CA_CWR;
+ tcp_set_ca_state(tp, TCP_CA_CWR);
}
}
}
tcp_sync_left_out(tp);
- tp->ca_state = TCP_CA_Open;
+ tcp_set_ca_state(tp, TCP_CA_Open);
tp->frto_highmark = tp->snd_nxt;
}
tp->reordering = min_t(unsigned int, tp->reordering,
sysctl_tcp_reordering);
- tp->ca_state = TCP_CA_Loss;
+ tcp_set_ca_state(tp, TCP_CA_Loss);
tp->high_seq = tp->frto_highmark;
TCP_ECN_queue_cwr(tp);
}
tp->reordering = min_t(unsigned int, tp->reordering,
sysctl_tcp_reordering);
- tp->ca_state = TCP_CA_Loss;
+ tcp_set_ca_state(tp, TCP_CA_Loss);
tp->high_seq = tp->snd_nxt;
TCP_ECN_queue_cwr(tp);
}
tcp_moderate_cwnd(tp);
return 1;
}
- tp->ca_state = TCP_CA_Open;
+ tcp_set_ca_state(tp, TCP_CA_Open);
return 0;
}
tp->retransmits = 0;
tp->undo_marker = 0;
if (!IsReno(tp))
- tp->ca_state = TCP_CA_Open;
+ tcp_set_ca_state(tp, TCP_CA_Open);
return 1;
}
return 0;
state = TCP_CA_Disorder;
if (tp->ca_state != state) {
- tp->ca_state = state;
+ tcp_set_ca_state(tp, state);
tp->high_seq = tp->snd_nxt;
}
tcp_moderate_cwnd(tp);
* is ACKed for CWR bit to reach receiver. */
if (tp->snd_una != tp->high_seq) {
tcp_complete_cwr(tp);
- tp->ca_state = TCP_CA_Open;
+ tcp_set_ca_state(tp, TCP_CA_Open);
}
break;
* catching for all duplicate ACKs. */
IsReno(tp) || tp->snd_una != tp->high_seq) {
tp->undo_marker = 0;
- tp->ca_state = TCP_CA_Open;
+ tcp_set_ca_state(tp, TCP_CA_Open);
}
break;
}
tp->snd_cwnd_cnt = 0;
- tp->ca_state = TCP_CA_Recovery;
+ tcp_set_ca_state(tp, TCP_CA_Recovery);
}
if (is_dupack || tcp_head_timedout(sk, tp))