For for each TSN t being newly acked (Not only cumulatively,
but also SELECTIVELY) cacc_saw_newack should be set to 1.

Signed-off-by: Xiangzhong Chang <[email protected]>
---
 net/sctp/outqueue.c |   42 +++++++++++++++++++++---------------------
 1 file changed, 21 insertions(+), 21 deletions(-)

diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c
index 94df758..d86032b 100644
--- a/net/sctp/outqueue.c
+++ b/net/sctp/outqueue.c
@@ -1398,6 +1398,27 @@ static void sctp_check_transmitted(struct sctp_outq *q,
                                forward_progress = true;
                        }
 
+                       if (!tchunk->tsn_gap_acked) {
+                               /*
+                                * SFR-CACC algorithm:
+                                * 2) If the SACK contains gap acks
+                                * and the flag CHANGEOVER_ACTIVE is
+                                * set the receiver of the SACK MUST
+                                * take the following action:
+                                *
+                                * B) For each TSN t being acked that
+                                * has not been acked in any SACK so
+                                * far, set cacc_saw_newack to 1 for
+                                * the destination that the TSN was
+                                * sent to.
+                                */
+                               if (transport &&
+                                   sack->num_gap_ack_blocks &&
+                                   q->asoc->peer.primary_path->cacc.
+                                   changeover_active)
+                                       transport->cacc.cacc_saw_newack = 1;
+                       }
+
                        if (TSN_lte(tsn, sack_ctsn)) {
                                /* RFC 2960  6.3.2 Retransmission Timer Rules
                                 *
@@ -1411,27 +1432,6 @@ static void sctp_check_transmitted(struct sctp_outq *q,
                                restart_timer = 1;
                                forward_progress = true;
 
-                               if (!tchunk->tsn_gap_acked) {
-                                       /*
-                                        * SFR-CACC algorithm:
-                                        * 2) If the SACK contains gap acks
-                                        * and the flag CHANGEOVER_ACTIVE is
-                                        * set the receiver of the SACK MUST
-                                        * take the following action:
-                                        *
-                                        * B) For each TSN t being acked that
-                                        * has not been acked in any SACK so
-                                        * far, set cacc_saw_newack to 1 for
-                                        * the destination that the TSN was
-                                        * sent to.
-                                        */
-                                       if (transport &&
-                                           sack->num_gap_ack_blocks &&
-                                           q->asoc->peer.primary_path->cacc.
-                                           changeover_active)
-                                               transport->cacc.cacc_saw_newack
-                                                       = 1;
-                               }
 
                                list_add_tail(&tchunk->transmitted_list,
                                              &q->sacked);
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to