From: Chris Wright Date: Wed, 8 Jun 2005 22:38:57 +0000 (-0700) Subject: Add netem duplication fix from Steve Hemminger. X-Git-Tag: v2.6.11.12~7 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8a43379aa618a79e22e195508e97416b2ad56e63;p=thirdparty%2Fkernel%2Fstable-queue.git Add netem duplication fix from Steve Hemminger. --- 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