From 8a43379aa618a79e22e195508e97416b2ad56e63 Mon Sep 17 00:00:00 2001 From: Chris Wright Date: Wed, 8 Jun 2005 15:38:57 -0700 Subject: [PATCH] Add netem duplication fix from Steve Hemminger. --- queue/netem-duplication-fix.patch | 36 +++++++++++++++++++++++++++++++ queue/series | 1 + 2 files changed, 37 insertions(+) create mode 100644 queue/netem-duplication-fix.patch diff --git a/queue/netem-duplication-fix.patch b/queue/netem-duplication-fix.patch new file mode 100644 index 00000000000..fb9787da347 --- /dev/null +++ b/queue/netem-duplication-fix.patch @@ -0,0 +1,36 @@ +From shemminger@osdl.org Wed Jun 8 09:30:09 2005 +Date: Wed, 8 Jun 2005 09:30:09 -0700 +From: Stephen Hemminger +To: Chris Wright +Subject: [PATCH] [PKT_SCHED]: netem: duplication fix + +Netem duplication can cause infinite loop in qdisc_run +because the qlen of the parent qdisc is not affected by the duplication. + +Signed-off-by: Stephen Hemminger +Signed-off-by: Chris Wright + +Index: 2.6.11.11-net/net/sched/sch_netem.c +=================================================================== +--- 2.6.11.11-net.orig/net/sched/sch_netem.c ++++ 2.6.11.11-net/net/sched/sch_netem.c +@@ -184,10 +184,15 @@ static int netem_enqueue(struct sk_buff + /* Random duplication */ + if (q->duplicate && q->duplicate >= get_crandom(&q->dup_cor)) { + struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC); +- +- pr_debug("netem_enqueue: dup %p\n", skb2); +- if (skb2) +- delay_skb(sch, skb2); ++ if (skb2) { ++ struct Qdisc *rootq = sch->dev->qdisc; ++ u32 dupsave = q->duplicate; ++ ++ /* prevent duplicating a dup... */ ++ q->duplicate = 0; ++ rootq->enqueue(skb2, rootq); ++ q->duplicate = dupsave; ++ } + } + + /* If doing simple delay then gap == 0 so all packets diff --git a/queue/series b/queue/series index 6707ce90af6..955fee5af91 100644 --- a/queue/series +++ b/queue/series @@ -6,3 +6,4 @@ x86_64-fix-ptrace-boundary-check.patch bttv-vc100.patch fix-log_do_checkpoint-assertion-failure.patch bridge-fdb-postfilter.patch +netem-duplication-fix.patch -- 2.47.3