diff --git a/kernel/exit.c b/kernel/exit.c
index a098d76a9877ec8463195d2d806e2d67b5f68bd1..b39f4b3c0f37cbf850c656db0e1dae22451be607 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -784,7 +784,6 @@ void do_exit(long code)
 	 * Make sure we are holding no locks:
 	 */
 	debug_check_no_locks_held();
-	futex_exit_done(tsk);
 
 	if (tsk->io_context)
 		exit_io_context(tsk);
diff --git a/kernel/futex.c b/kernel/futex.c
index 32a606b605cbbeaa70e19e2a3dc353aeb30b4479..f85635ff2fce1aed50b92c1ed300468ca6b4b9e5 100644
--- a/kernel/futex.c
+++ b/kernel/futex.c
@@ -3255,6 +3255,7 @@ void futex_exec_release(struct task_struct *tsk)
 void futex_exit_release(struct task_struct *tsk)
 {
 	futex_exec_release(tsk);
+	futex_exit_done(tsk);
 }
 
 long do_futex(u32 __user *uaddr, int op, u32 val, ktime_t *timeout,