From: Balbir Singh and Li Zefan This patch allows mm->owner to be NULL when mm_owner callback is called. Without this patch, (for example) you can see panic while you do migrate a set of task, which calls fork/exit. Signed-off-by: Balbir Singh Signed-off-by: Li Zefan Tested-by: KAMEZAWA Hiroyuki Signed-off-by: Andrew Morton --- kernel/cgroup.c | 5 +++-- kernel/exit.c | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff -puN kernel/cgroup.c~memrlimit-setup-the-memrlimit-controller-mm_owner-fix kernel/cgroup.c --- a/kernel/cgroup.c~memrlimit-setup-the-memrlimit-controller-mm_owner-fix +++ a/kernel/cgroup.c @@ -2761,13 +2761,14 @@ void cgroup_fork_callbacks(struct task_s */ void cgroup_mm_owner_callbacks(struct task_struct *old, struct task_struct *new) { - struct cgroup *oldcgrp, *newcgrp = NULL; + struct cgroup *oldcgrp = NULL, *newcgrp = NULL; if (need_mm_owner_callback) { int i; for (i = 0; i < CGROUP_SUBSYS_COUNT; i++) { struct cgroup_subsys *ss = subsys[i]; - oldcgrp = task_cgroup(old, ss->subsys_id); + if (old) + oldcgrp = task_cgroup(old, ss->subsys_id); if (new) newcgrp = task_cgroup(new, ss->subsys_id); if (oldcgrp == newcgrp) diff -puN kernel/exit.c~memrlimit-setup-the-memrlimit-controller-mm_owner-fix kernel/exit.c --- a/kernel/exit.c~memrlimit-setup-the-memrlimit-controller-mm_owner-fix +++ a/kernel/exit.c @@ -641,8 +641,8 @@ retry: * the callback and take action */ down_write(&mm->mmap_sem); - cgroup_mm_owner_callbacks(mm->owner, NULL); mm->owner = NULL; + cgroup_mm_owner_callbacks(mm->owner, NULL); up_write(&mm->mmap_sem); return; _