From: Jarek Poplawski
Date: Mon, 18 Aug 2008 22:12:36 +0200
> David Miller wrote, On 08/18/2008 12:32 AM:
It sounds good in theory, but you cannot make this place be netdev_queue,
because multiple netdev_queue objects can point to the same qdisc.
That's why the lock isn't in netdev_queue any more, there is no longer
a 1 to 1 relationship.
> Actually, after partly fixing this we have currently messed this up
Yep, and that's the lock debugging thing which is triggering now.
Likely what I'll do is simply reinstate RCU but only for the freeing
of the memory, nothing more.
This keeps everything doing destruction under RTNL as desired,
yet fixes the "we're holding lock that's being freed" problem.
> As mentioned there was also this tricky qdisc_watchdog (or other
If RTNL is held, we must be saving the correct lock.
Root qdisc and other aspects of qdisc configuration cannot be changing
when RTNL is held. That is why I put RTNL assertion in
qdisc_root_lock() as this is the only valid situation where it may be
used.