Messages in this thread Patch in this message |  | | | Date | Wed, 8 Jun 2005 17:24:07 -0700 | | From | Chris Wright <> | | Subject | [patch 09/09] [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 <shemminger@osdl.org> Signed-off-by: Chris Wright <chrisw@osdl.org>
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 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |