> > 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