> > Anyways, I tried a few different things, and what it looks like is
> > sch->parent will be NULL (0) for the top-level device.  This is 
> > sch->correct,
> > and trying to mess with that screws up qdisc_graft() when unloading 
> > the qdisc.  I also tried adding a TCQ_F_ROOT flag to 
> sch->flags when 
> > classid is TC_H_ROOT, but that also screwed up unloading the qdisc.
> 
> 
> I dont think I understand. Whats the problem with setting 
> sch->parent on initialization instead on grafting as I did in 
> my example patch?
> Please explain the problems arrising on unload in detail.

sch->parent is getting set on initialization, and for the root and
ingress qdiscs, it's left at zero.  If I change that value, when the
root qdisc is unloaded and pfifo_fast is put back into place, the
qdisc_destroy() walks the tree and attempts to free memory from the
handle pointed at by sch->parent.  It stops when sch->parent is NULL, so
sch->parent is actually being set as intended.  The only thing that
confused me is that nowhere in the qdisc is TC_H_ROOT included
explicitly, rather, the root qdisc is where sch->parent is NULL.

So I misunderstood what was actually wrong.  The qdisc code is ok as-is,
it's just that the top-level qdisc (root and ingress) have a sch->parent
of NULL, which is being set correctly today.

Hope that clarifies.

Thanks,
-PJ
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to