diff options
author | Shakeel Butt <[email protected]> | 2018-06-14 15:26:27 -0700 |
---|---|---|
committer | Linus Torvalds <[email protected]> | 2018-06-15 07:55:23 +0900 |
commit | 92ee383f6daab4da5471b86f6fdaba775e6928f6 (patch) | |
tree | c4e70bb32e51df2b0f4b35c82e3dc5c4f794c663 /tools/perf/scripts/python/export-to-postgresql.py | |
parent | 2bdce74412c249ac01dfe36b6b0043ffd7a5361e (diff) |
mm: fix race between kmem_cache destroy, create and deactivate
The memcg kmem cache creation and deactivation (SLUB only) is
asynchronous. If a root kmem cache is destroyed whose memcg cache is in
the process of creation or deactivation, the kernel may crash.
Example of one such crash:
general protection fault: 0000 [#1] SMP PTI
CPU: 1 PID: 1721 Comm: kworker/14:1 Not tainted 4.17.0-smp
...
Workqueue: memcg_kmem_cache kmemcg_deactivate_workfn
RIP: 0010:has_cpu_slab
...
Call Trace:
? on_each_cpu_cond
__kmem_cache_shrink
kmemcg_cache_deact_after_rcu
kmemcg_deactivate_workfn
process_one_work
worker_thread
kthread
ret_from_fork+0x35/0x40
To fix this race, on root kmem cache destruction, mark the cache as
dying and flush the workqueue used for memcg kmem cache creation and
deactivation. SLUB's memcg kmem cache deactivation also includes RCU
callback and thus make sure all previous registered RCU callbacks have
completed as well.
[[email protected]: handle the RCU callbacks for SLUB deactivation]
Link: http://lkml.kernel.org/r/[email protected]
[[email protected]: add more documentation, rename fields for readability]
Link: http://lkml.kernel.org/r/[email protected]
[[email protected]: fix build, per Shakeel]
[[email protected]: v3. Instead of refcount, flush the workqueue]
Link: http://lkml.kernel.org/r/[email protected]
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Shakeel Butt <[email protected]>
Acked-by: Vladimir Davydov <[email protected]>
Cc: Michal Hocko <[email protected]>
Cc: Greg Thelen <[email protected]>
Cc: Christoph Lameter <[email protected]>
Cc: Pekka Enberg <[email protected]>
Cc: David Rientjes <[email protected]>
Cc: Joonsoo Kim <[email protected]>
Cc: Johannes Weiner <[email protected]>
Cc: Tejun Heo <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Diffstat (limited to 'tools/perf/scripts/python/export-to-postgresql.py')
0 files changed, 0 insertions, 0 deletions