Patch "memcg: add RCU locking around css_for_each_descendant_pre() in memcg_offline_kmem()" has been added to the 4.6-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
memcg: add RCU locking around css_for_each_descendant_pre() in memcg_offline_kmem()
to the 4.6-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
memcg-add-rcu-locking-around-css_for_each_descendant_pre-in-memcg_offline_kmem.patch
and it can be found in the queue-4.6 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
3a06bb78ceeceacc86a1e31133a7944013f9775bMon Sep 17 00:00:00 2001
From: Tejun Heo <[email protected]>
Date: Fri, 3 Jun 2016 14:55:44 -0700
Subject: memcg: add RCU locking around css_for_each_descendant_pre() in memcg_offline_kmem()
From: Tejun Heo <[email protected]>
commit 3a06bb78ceeceacc86a1e31133a7944013f9775b upstream.
memcg_offline_kmem() may be called from memcg_free_kmem() after a css init failure. memcg_free_kmem() is a ->css_free callback which is called without cgroup_mutex and memcg_offline_kmem() ends up using css_for_each_descendant_pre() without any locking. Fix it by adding rcu read locking around it.
mkdir: cannot create directory `65530': No space left on device
===============================
[ INFO: suspicious RCU usage. ]
4.6.0-work+ #321 Not tainted
-------------------------------
kernel/cgroup.c:4008 cgroup_mutex or RCU read lock required!
[ 527.243970] other info that might help us debug this:
[ 527.244715]
rcu_scheduler_active = 1, debug_locks = 0
2 locks held by kworker/0:5/1664:
#0: ("cgroup_destroy"){.+.+..}, at: [<ffffffff81060ab5>] process_one_work+0x165/0x4a0
#1: ((&css->destroy_work)#3){+.+...}, at: [<ffffffff81060ab5>] process_one_work+0x165/0x4a0
[ 527.248098] stack backtrace:
CPU: 0 PID: 1664 Comm: kworker/0:5 Not tainted 4.6.0-work+ #321
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.9.1-1.fc24 04/01/2014
Workqueue: cgroup_destroy css_free_work_fn
Call Trace:
dump_stack+0x68/0xa1
lockdep_rcu_suspicious+0xd7/0x110
css_next_descendant_pre+0x7d/0xb0
memcg_offline_kmem.part.44+0x4a/0xc0
mem_cgroup_css_free+0x1ec/0x200
css_free_work_fn+0x49/0x5e0
process_one_work+0x1c5/0x4a0
worker_thread+0x49/0x490
kthread+0xea/0x100
ret_from_fork+0x1f/0x40--- mm/memcontrol.c | 3 +++ 1 file changed, 3 insertions(+)
mm/memcontrol.c +3 -0
@@ -2877,6 +2877,7 @@ static void memcg_offline_kmem(struct me* ordering is imposed by list_lru_node->lock taken by * memcg_drain_all_list_lrus(). */ +rcu_read_lock ();/* can be called from css_free w/o cgroup_mutex */ css_for_each_descendant_pre (css, &memcg->css) { child =mem_cgroup_from_css (css);BUG_ON (child->kmemcg_id != kmemcg_id);
@@ -2884,6 +2885,8 @@ static void memcg_offline_kmem(struct meif (!memcg->use_hierarchy)break ; } +rcu_read_unlock (); +memcg_drain_all_list_lrus (kmemcg_id, parent->kmemcg_id);memcg_free_cache_id (kmemcg_id);
Patches currently in stable-queue which might be from [email protected] are
queue-4.6/memcg-add-rcu-locking-around-css_for_each_descendant_pre-in-memcg_offline_kmem.patch