On Wed, 04 May 2005 01:35:29 +0200
Patrick McHardy <kaber@xxxxxxxxx> wrote:
> Stephen Hemminger wrote:
> > Fix qlen underrun when doing duplication with netem. If netem is used as
> > leaf discipline, then the parent needs to be tweaked when packets are
> > duplicated.
>
> > + /* Since one packet can generate two packets in the
> > + * queue, the parent's qlen accounting gets confused,
> > + * so fix it.
> > + */
> > + qp = qdisc_lookup(sch->dev, TC_H_MAJ(sch->parent));
> > + if (qp)
> > + qp->q.qlen++;
>
> This only works in a hierarchy with just one qdisc above netem, there
> could be up to seven (check_loop_fn prevents more than that). It's also
> not safe because it violates qdisc locking rules, when this code is
> executed dev->queue_lock is already taken and qdisc_lookup() grabs
> qdisc_tree_lock, but they can only be taken in the other order.
I see... I'm leaving Stephen's patch in there for now.
Perhaps we can create some kind of "propagate up" function
that will handle all of the parents in the qdisc hierarchy
above netem?
|