diff options
Diffstat (limited to 'net/l2tp/l2tp_core.c')
-rw-r--r-- | net/l2tp/l2tp_core.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/net/l2tp/l2tp_core.c b/net/l2tp/l2tp_core.c index 456b52d8f6d8..d1ab3a236cca 100644 --- a/net/l2tp/l2tp_core.c +++ b/net/l2tp/l2tp_core.c | |||
@@ -428,6 +428,7 @@ start: | |||
428 | session->name, L2TP_SKB_CB(skb)->ns, | 428 | session->name, L2TP_SKB_CB(skb)->ns, |
429 | L2TP_SKB_CB(skb)->length, session->nr, | 429 | L2TP_SKB_CB(skb)->length, session->nr, |
430 | skb_queue_len(&session->reorder_q)); | 430 | skb_queue_len(&session->reorder_q)); |
431 | session->reorder_skip = 1; | ||
431 | __skb_unlink(skb, &session->reorder_q); | 432 | __skb_unlink(skb, &session->reorder_q); |
432 | kfree_skb(skb); | 433 | kfree_skb(skb); |
433 | if (session->deref) | 434 | if (session->deref) |
@@ -436,6 +437,14 @@ start: | |||
436 | } | 437 | } |
437 | 438 | ||
438 | if (L2TP_SKB_CB(skb)->has_seq) { | 439 | if (L2TP_SKB_CB(skb)->has_seq) { |
440 | if (session->reorder_skip) { | ||
441 | PRINTK(session->debug, L2TP_MSG_SEQ, KERN_DEBUG, | ||
442 | "%s: advancing nr to next pkt: %u -> %u", | ||
443 | session->name, session->nr, | ||
444 | L2TP_SKB_CB(skb)->ns); | ||
445 | session->reorder_skip = 0; | ||
446 | session->nr = L2TP_SKB_CB(skb)->ns; | ||
447 | } | ||
439 | if (L2TP_SKB_CB(skb)->ns != session->nr) { | 448 | if (L2TP_SKB_CB(skb)->ns != session->nr) { |
440 | PRINTK(session->debug, L2TP_MSG_SEQ, KERN_DEBUG, | 449 | PRINTK(session->debug, L2TP_MSG_SEQ, KERN_DEBUG, |
441 | "%s: holding oos pkt %u len %d, " | 450 | "%s: holding oos pkt %u len %d, " |