aboutsummaryrefslogtreecommitdiffstats
path: root/net/sctp/ulpqueue.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/sctp/ulpqueue.c')
-rw-r--r--net/sctp/ulpqueue.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/net/sctp/ulpqueue.c b/net/sctp/ulpqueue.c
index ada17464b65b..63afddcbcd2c 100644
--- a/net/sctp/ulpqueue.c
+++ b/net/sctp/ulpqueue.c
@@ -969,11 +969,16 @@ static __u16 sctp_ulpq_renege_list(struct sctp_ulpq *ulpq,
969 969
970 tsnmap = &ulpq->asoc->peer.tsn_map; 970 tsnmap = &ulpq->asoc->peer.tsn_map;
971 971
972 while ((skb = __skb_dequeue_tail(list)) != NULL) { 972 while ((skb = skb_peek_tail(list)) != NULL) {
973 freed += skb_headlen(skb);
974 event = sctp_skb2event(skb); 973 event = sctp_skb2event(skb);
975 tsn = event->tsn; 974 tsn = event->tsn;
976 975
976 /* Don't renege below the Cumulative TSN ACK Point. */
977 if (TSN_lte(tsn, sctp_tsnmap_get_ctsn(tsnmap)))
978 break;
979
980 __skb_unlink(skb, list);
981 freed += skb_headlen(skb);
977 sctp_ulpevent_free(event); 982 sctp_ulpevent_free(event);
978 sctp_tsnmap_renege(tsnmap, tsn); 983 sctp_tsnmap_renege(tsnmap, tsn);
979 if (freed >= needed) 984 if (freed >= needed)