Re: regression 4.4: deadlock in with cgroup percpu_rwsem

From: Paul E. McKenney
Date: Fri Jan 22 2016 - 21:03:17 EST


On Wed, Jan 20, 2016 at 10:30:07AM -0500, Tejun Heo wrote:
> Hello,
>
> On Wed, Jan 20, 2016 at 11:47:58AM +0100, Peter Zijlstra wrote:
> > TJ, is css_offline guaranteed to be called in hierarchical order? I
>
> No, they aren't. The ancestors of a css are guaranteed to stay around
> until css_free is called on the css and that's the only ordering
> guarantee.
>
> > got properly lost in the whole cgroup destroy code. There's endless
> > workqueues and rcu callbacks there.
>
> Yeah, it's hairy. I wondered about adding support for bouncing to
> workqueue in both percpu_ref and rcu which would make things easier to
> follow. Not sure how often this pattern happens tho.

This came up recently offlist for call_rcu(), so that a call to (say)
call_rcu_schedule_work() would do a schedule_work() after a grace period
elapsed, invoking the function passed in to call_rcu_schedule_work().
There are several existing cases that do this, so special-casing it seems
worthwhile. Perhaps something vaguely similar would work for percpu_ref.

Thanx, Paul