diff --git a/[refs] b/[refs] index 60d5f52ac9c2..b0608a8a1b03 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9c7c354645535555785eb937dd46388b55e690d0 +refs/heads/master: 8141c7f3e7aee618312fa1c15109e1219de784a7 diff --git a/trunk/kernel/exit.c b/trunk/kernel/exit.c index ae2b92be5fae..2d8be7ebb0f7 100644 --- a/trunk/kernel/exit.c +++ b/trunk/kernel/exit.c @@ -40,7 +40,6 @@ #include #include #include -#include #include #include /* for audit_free() */ #include @@ -1059,14 +1058,6 @@ NORET_TYPE void do_exit(long code) exit_itimers(tsk->signal); } acct_collect(code, group_dead); -#ifdef CONFIG_FUTEX - if (unlikely(tsk->robust_list)) - exit_robust_list(tsk); -#ifdef CONFIG_COMPAT - if (unlikely(tsk->compat_robust_list)) - compat_exit_robust_list(tsk); -#endif -#endif if (group_dead) tty_audit_exit(); if (unlikely(tsk->audit_context)) diff --git a/trunk/kernel/fork.c b/trunk/kernel/fork.c index f6083561dfe0..2a372a0e206f 100644 --- a/trunk/kernel/fork.c +++ b/trunk/kernel/fork.c @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -519,6 +520,16 @@ void mm_release(struct task_struct *tsk, struct mm_struct *mm) { struct completion *vfork_done = tsk->vfork_done; + /* Get rid of any futexes when releasing the mm */ +#ifdef CONFIG_FUTEX + if (unlikely(tsk->robust_list)) + exit_robust_list(tsk); +#ifdef CONFIG_COMPAT + if (unlikely(tsk->compat_robust_list)) + compat_exit_robust_list(tsk); +#endif +#endif + /* Get rid of any cached register state */ deactivate_mm(tsk, mm);