memcg: fix mem_cgroup_print_bad_page
If DEBUG_VM, mem_cgroup_print_bad_page() is called whenever bad_page() shows a "Bad page state" message, removes page from circulation, adds a taint and continues. This is at a very low level, often when a spinlock is held (sometimes when page table lock is held, for example). We want to recover from this badness, not make it worse: we must not kmalloc memory here, we must not do a cgroup path lookup via dubious pointers. No doubt that code was useful to debug a particular case at one time, and may be again, but take it out of the mainline kernel. Signed-off-by: Hugh Dickins <hughd@google.com> Cc: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Michal Hocko <mhocko@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
12d2710786
commit
90b3feaec8
|
@ -3364,23 +3364,8 @@ void mem_cgroup_print_bad_page(struct page *page)
|
|||
|
||||
pc = lookup_page_cgroup_used(page);
|
||||
if (pc) {
|
||||
int ret = -1;
|
||||
char *path;
|
||||
|
||||
printk(KERN_ALERT "pc:%p pc->flags:%lx pc->mem_cgroup:%p",
|
||||
printk(KERN_ALERT "pc:%p pc->flags:%lx pc->mem_cgroup:%p\n",
|
||||
pc, pc->flags, pc->mem_cgroup);
|
||||
|
||||
path = kmalloc(PATH_MAX, GFP_KERNEL);
|
||||
if (path) {
|
||||
rcu_read_lock();
|
||||
ret = cgroup_path(pc->mem_cgroup->css.cgroup,
|
||||
path, PATH_MAX);
|
||||
rcu_read_unlock();
|
||||
}
|
||||
|
||||
printk(KERN_CONT "(%s)\n",
|
||||
(ret < 0) ? "cannot get the path" : path);
|
||||
kfree(path);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue