sctp: remove 'resent' bit from the chunk
authorVlad Yasevich <vladislav.yasevich@hp.com>
Sat, 1 May 2010 02:41:09 +0000 (22:41 -0400)
committerVlad Yasevich <vladislav.yasevich@hp.com>
Sat, 1 May 2010 02:41:09 +0000 (22:41 -0400)
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>
include/net/sctp/structs.h
net/sctp/output.c
net/sctp/outqueue.c
net/sctp/sm_make_chunk.c

index ff30177..03deffb 100644 (file)
@@ -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);
index fad261d..35e49b9 100644 (file)
@@ -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;
                }
 
index a4fe7de..4e551ba 100644 (file)
@@ -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;
index 33aed1c..24effdf 100644 (file)
@@ -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;