From a21dfa6598f17adad9a753517effbde1759cc32e Mon Sep 17 00:00:00 2001 From: "Lee A. Roberts" Date: Thu, 28 Feb 2013 04:37:28 +0000 Subject: [PATCH] --- yaml --- r: 360781 b: refs/heads/master c: e67f85ecd83de66d4f25f2e0f90bb0d01a52ddd8 h: refs/heads/master i: 360779: c8fc876b0bc2238de51e01aa73dfe0670168c52f v: v3 --- [refs] | 2 +- trunk/net/sctp/ulpqueue.c | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 6c8e14142c69..4f7122b373d0 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 70fc69bc5a54d9776ace7c99d46eb533f8fb6e89 +refs/heads/master: e67f85ecd83de66d4f25f2e0f90bb0d01a52ddd8 diff --git a/trunk/net/sctp/ulpqueue.c b/trunk/net/sctp/ulpqueue.c index ada17464b65b..63afddcbcd2c 100644 --- a/trunk/net/sctp/ulpqueue.c +++ b/trunk/net/sctp/ulpqueue.c @@ -969,11 +969,16 @@ static __u16 sctp_ulpq_renege_list(struct sctp_ulpq *ulpq, tsnmap = &ulpq->asoc->peer.tsn_map; - while ((skb = __skb_dequeue_tail(list)) != NULL) { - freed += skb_headlen(skb); + while ((skb = skb_peek_tail(list)) != NULL) { event = sctp_skb2event(skb); tsn = event->tsn; + /* Don't renege below the Cumulative TSN ACK Point. */ + if (TSN_lte(tsn, sctp_tsnmap_get_ctsn(tsnmap))) + break; + + __skb_unlink(skb, list); + freed += skb_headlen(skb); sctp_ulpevent_free(event); sctp_tsnmap_renege(tsnmap, tsn); if (freed >= needed)