On Sat, 7 Jul 2007, Ranko Zivojnovic wrote:

On Fri, 2007-07-06 at 16:21 +0200, Patrick McHardy wrote:
There is at least one ABBA deadlock, est_timer does:

read_lock(&est_lock)
spin_lock(e->stats_lock) (which is dev->queue_lock)

and qdisc_destroy calls htb_destroy under dev->queue_lock, which
calls htb_destroy_class, then gen_kill_estimator and this
write_locks est_lock.

I can't see the problem above though, the qdisc_run path only takes
dev->queue_lock. Please enable lockdep and post the output if any.


I've got both code paths this time. It shows exactly the ABBA deadlock
you describe above. The details are below.


Thanks. I'm still wondering whats causing the other lockup
you're seeing.

Maybe the appropriate way to fix this would to call gen_kill_estimator,
with the appropriate lock order, before the call to qdisc_destroy, so
when dev->queue_lock is taken for qdisc_destroy - the structure is
already off the list.


Probably easier to just kill est_lock and use rcu lists.
I'm currently travelling, I'll look into it tomorrow.
-
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