aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2014-02-12 19:06:19 -0500
committerTejun Heo <tj@kernel.org>2014-02-12 19:08:28 -0500
commit1a11533fbd71792e8c5d36f6763fbce8df0d231d (patch)
treef7d31231685d2c52af4804d265956660f0f849fb /kernel
parent0ab02ca8f887908152d1a96db5130fc661d36a1e (diff)
Revert "cgroup: use an ordered workqueue for cgroup destruction"
This reverts commit ab3f5faa6255a0eb4f832675507d9e295ca7e9ba. Explanation from Hugh: It's because more thorough testing, by others here, found that it wasn't always solving the problem: so I asked Tejun privately to hold off from sending it in, until we'd worked out why not. Most of our testing being on a v3,11-based kernel, it was perfectly possible that the problem was merely our own e.g. missing Tejun's 8a2b75384444 ("workqueue: fix ordered workqueues in NUMA setups"). But that turned out not to be enough to fix it either. Then Filipe pointed out how percpu_ref_kill_and_confirm() uses call_rcu_sched() before we ever get to put the offline on to the workqueue: by the time we get to the workqueue, the ordering has already been lost. So, thanks for the Acks, but I'm afraid that this ordered workqueue solution is just not good enough: we should simply forget that patch and provide a different answer." Signed-off-by: Tejun Heo <tj@kernel.org> Cc: Hugh Dickins <hughd@google.com>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/cgroup.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/kernel/cgroup.c b/kernel/cgroup.c
index 52719ce55dd3..68d87103b493 100644
--- a/kernel/cgroup.c
+++ b/kernel/cgroup.c
@@ -4844,16 +4844,12 @@ static int __init cgroup_wq_init(void)
4844 /* 4844 /*
4845 * There isn't much point in executing destruction path in 4845 * There isn't much point in executing destruction path in
4846 * parallel. Good chunk is serialized with cgroup_mutex anyway. 4846 * parallel. Good chunk is serialized with cgroup_mutex anyway.
4847 * 4847 * Use 1 for @max_active.
4848 * XXX: Must be ordered to make sure parent is offlined after
4849 * children. The ordering requirement is for memcg where a
4850 * parent's offline may wait for a child's leading to deadlock. In
4851 * the long term, this should be fixed from memcg side.
4852 * 4848 *
4853 * We would prefer to do this in cgroup_init() above, but that 4849 * We would prefer to do this in cgroup_init() above, but that
4854 * is called before init_workqueues(): so leave this until after. 4850 * is called before init_workqueues(): so leave this until after.
4855 */ 4851 */
4856 cgroup_destroy_wq = alloc_ordered_workqueue("cgroup_destroy", 0); 4852 cgroup_destroy_wq = alloc_workqueue("cgroup_destroy", 0, 1);
4857 BUG_ON(!cgroup_destroy_wq); 4853 BUG_ON(!cgroup_destroy_wq);
4858 4854
4859 /* 4855 /*