sctp: remove 'resent' bit from the chunk
The 'resent' bit is used to make sure that we don't update rto estimate based on retransmitted chunks. However, we already have the 'rto_pending' bit that we test when need to update rto, so 'resent' bit is just extra. Additionally, we currently have a bug in that we always set a 'resent' bit and thus rto estimate is only updated by Heartbeats. Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
This commit is contained in:
parent
d598b166ce
commit
ae19c54866
4 changed files with 10 additions and 20 deletions
|
@ -757,7 +757,6 @@ struct sctp_chunk {
|
|||
#define SCTP_NEED_FRTX 0x1
|
||||
#define SCTP_DONT_FRTX 0x2
|
||||
__u16 rtt_in_progress:1, /* This chunk used for RTT calc? */
|
||||
resent:1, /* Has this chunk ever been resent. */
|
||||
has_tsn:1, /* Does this chunk have a TSN yet? */
|
||||
has_ssn:1, /* Does this chunk have a SSN yet? */
|
||||
singleton:1, /* Only chunk in the packet? */
|
||||
|
@ -1065,7 +1064,7 @@ void sctp_transport_route(struct sctp_transport *, union sctp_addr *,
|
|||
struct sctp_sock *);
|
||||
void sctp_transport_pmtu(struct sctp_transport *);
|
||||
void sctp_transport_free(struct sctp_transport *);
|
||||
void sctp_transport_reset_timers(struct sctp_transport *, int);
|
||||
void sctp_transport_reset_timers(struct sctp_transport *);
|
||||
void sctp_transport_hold(struct sctp_transport *);
|
||||
void sctp_transport_put(struct sctp_transport *);
|
||||
void sctp_transport_update_rto(struct sctp_transport *, __u32);
|
||||
|
|
|
@ -429,24 +429,17 @@ int sctp_packet_transmit(struct sctp_packet *packet)
|
|||
list_for_each_entry_safe(chunk, tmp, &packet->chunk_list, list) {
|
||||
list_del_init(&chunk->list);
|
||||
if (sctp_chunk_is_data(chunk)) {
|
||||
/* 6.3.1 C4) When data is in flight and when allowed
|
||||
* by rule C5, a new RTT measurement MUST be made each
|
||||
* round trip. Furthermore, new RTT measurements
|
||||
* SHOULD be made no more than once per round-trip
|
||||
* for a given destination transport address.
|
||||
*/
|
||||
|
||||
if (!chunk->resent) {
|
||||
|
||||
/* 6.3.1 C4) When data is in flight and when allowed
|
||||
* by rule C5, a new RTT measurement MUST be made each
|
||||
* round trip. Furthermore, new RTT measurements
|
||||
* SHOULD be made no more than once per round-trip
|
||||
* for a given destination transport address.
|
||||
*/
|
||||
|
||||
if (!tp->rto_pending) {
|
||||
chunk->rtt_in_progress = 1;
|
||||
tp->rto_pending = 1;
|
||||
}
|
||||
if (!tp->rto_pending) {
|
||||
chunk->rtt_in_progress = 1;
|
||||
tp->rto_pending = 1;
|
||||
}
|
||||
|
||||
chunk->resent = 1;
|
||||
|
||||
has_data = 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -1405,7 +1405,6 @@ static void sctp_check_transmitted(struct sctp_outq *q,
|
|||
* instance).
|
||||
*/
|
||||
if (!tchunk->tsn_gap_acked &&
|
||||
!tchunk->resent &&
|
||||
tchunk->rtt_in_progress) {
|
||||
tchunk->rtt_in_progress = 0;
|
||||
rtt = jiffies - tchunk->sent_at;
|
||||
|
|
|
@ -1205,7 +1205,6 @@ struct sctp_chunk *sctp_chunkify(struct sk_buff *skb,
|
|||
INIT_LIST_HEAD(&retval->list);
|
||||
retval->skb = skb;
|
||||
retval->asoc = (struct sctp_association *)asoc;
|
||||
retval->resent = 0;
|
||||
retval->has_tsn = 0;
|
||||
retval->has_ssn = 0;
|
||||
retval->rtt_in_progress = 0;
|
||||
|
|
Loading…
Reference in a new issue