[Devel] [PATCH RHEL7 COMMIT] mm: memcontrol: drop useless VM_BUG_ON's in memcg_{start, stop}_kmem_account
Konstantin Khorenko
khorenko at virtuozzo.com
Fri May 20 08:03:28 PDT 2016
The commit is pushed to "branch-rh7-3.10.0-327.18.2.vz7.14.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-327.18.2.vz7.14.5
------>
commit 236982bac97594855deca0edbd2bd0d239e25104
Author: Vladimir Davydov <vdavydov at virtuozzo.com>
Date: Fri May 20 19:03:28 2016 +0400
mm: memcontrol: drop useless VM_BUG_ON's in memcg_{start,stop}_kmem_account
No point in them, really - if these are called from a kernel thread or
by a dying process nothing bad is going to happen.
Quite the contrary, having them will result in KP if any of those is
called after exit_mm. An example goes below:
kernel BUG at mm/memcontrol.c:3358!
invalid opcode: 0000 [#1] SMP
CPU: 13 PID: 35647 Comm: mailsrvanalog ve: 1000 Not tainted 3.10.0-327.10.1.ovz.12.17+ #863 12.17
task: ffff8800a0188cb0 ti: ffff88005634c000 task.ti: ffff88005634c000
RIP: 0010:[<ffffffff811e9b55>] [<ffffffff811e9b55>] memcg_stop_kmem_account+0x25/0x30
RSP: 0018:ffff88005634fd00 EFLAGS: 00010246
RAX: ffff8800a0188cb0 RBX: ffff880118b580b0 RCX: ffff88005634fd39
RDX: 0000000000000033 RSI: ffff88005634fd36 RDI: 0000000000000035
RBP: ffff88005634fd00 R08: ffff880118b58000 R09: 00000000bed7ff49
R10: 000000007c640f5b R11: 00000000b6f8c81e R12: ffff880036aa4000
R13: ffff88005634fdc4 R14: ffff880118b58130 R15: ffff88009f440020
FS: 0000000000000000(0000) GS:ffff88014b140000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007fcbdb0977c0 CR3: 000000000194e000 CR4: 00000000000006e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Stack:
ffff88005634fd80 ffffffffa01ab5f6 ffff880144cf1f20 ffff8800364a38c0
2078696674736f50 737973206c69616d 336300800a6d6574 643332343339342f
3839336165356264 6236373636343735 3232626364373932 0033353639653465
Call Trace:
[<ffffffffa01ab5f6>] ext4_open_pfcache+0xc6/0x1a0 [ext4]
[<ffffffffa01abd59>] ext4_save_data_csum+0xc9/0x150 [ext4]
[<ffffffffa01aca3c>] ext4_commit_data_csum+0xac/0xd0 [ext4]
[<ffffffffa01570bc>] ext4_release_file+0xdc/0xf0 [ext4]
[<ffffffff811ffea1>] __fput+0xe1/0x250
[<ffffffff8120001e>] ____fput+0xe/0x10
[<ffffffff810a40f4>] task_work_run+0xc4/0xe0
[<ffffffff8108216b>] do_exit+0x2eb/0xb10
[<ffffffff81642984>] ? __do_page_fault+0x164/0x450
[<ffffffff81082a0f>] do_group_exit+0x3f/0xa0
[<ffffffff81082a84>] SyS_exit_group+0x14/0x20
[<ffffffff81647489>] system_call_fastpath+0x16/0x1b
Also, let's move memcg_{start,stop}_kmem_account to the header as they
both are tiny.
Fixes: 6812907ce7c3 ("pfcache: do not account peer files to memcg")
Signed-off-by: Vladimir Davydov <vdavydov at virtuozzo.com>
---
include/linux/memcontrol.h | 11 +++++++++--
mm/memcontrol.c | 13 -------------
2 files changed, 9 insertions(+), 15 deletions(-)
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h
index 1c5f916..37ce432 100644
--- a/include/linux/memcontrol.h
+++ b/include/linux/memcontrol.h
@@ -517,8 +517,15 @@ extern int memcg_nr_cache_ids;
extern void memcg_get_cache_ids(void);
extern void memcg_put_cache_ids(void);
-extern void memcg_stop_kmem_account(void);
-extern void memcg_resume_kmem_account(void);
+static inline void memcg_stop_kmem_account(void)
+{
+ current->memcg_kmem_skip_account++;
+}
+
+static inline void memcg_resume_kmem_account(void)
+{
+ current->memcg_kmem_skip_account--;
+}
/*
* Helper macro to loop through all memcg-specific caches. Callers must still
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 89c9edf..af2c14b 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -3353,19 +3353,6 @@ static void memcg_free_cache_id(int id)
* memcg_kmem_skip_account. So we enclose anything that might allocate memory
* inside the following two functions.
*/
-void memcg_stop_kmem_account(void)
-{
- VM_BUG_ON(!current->mm);
- current->memcg_kmem_skip_account++;
-}
-EXPORT_SYMBOL(memcg_stop_kmem_account);
-
-void memcg_resume_kmem_account(void)
-{
- VM_BUG_ON(!current->mm);
- current->memcg_kmem_skip_account--;
-}
-EXPORT_SYMBOL(memcg_resume_kmem_account);
struct memcg_kmem_cache_create_work {
struct mem_cgroup *memcg;
More information about the Devel
mailing list