Subject: Re: Oops in filter add

From: Patrick McHardy <[email-masked]>
Date: Tue, 20 Mar 2007 15:48:53 +0100

Chris Madden wrote:
> Ok, I replaced ingress_lock with queue_lock in ing_filter and it died in
> the same place.  Trace below (looks to be substantively the same)...
> 
> If I am reading tc_ctl_tfilter correctly, we are adding our new
> tcf_proto to the end of the list, and it is getting used before the
> change function is getting executed on it.   Locking the ingress_lock in
> qdisc_lock_tree ( in addition to the extant queue_lock )seems to have
> the same effect; I can get  a traceback from that if its useful.

The problem is that some classifiers (like basic, fw and route)
implement empty ->init functions, although fw and route properly
deal with it in their classification functions. The ->init function
should allocate and initalize tp->root, which basic fails to do.
If you give me a few hours I'll cook up a patch for this.