mark_engine_detached() removes ENGINE_STOP from engine->flags, this means utrace_control(UTRACE_DETACH) can never seer engine_wants_stop() == T.
Signed-off-by: Oleg Nesterov <o...@redhat.com> --- kernel/utrace.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) --- __UTRACE/kernel/utrace.c~1_FIX_DETACH_BEFORE_WANT_STOP 2009-09-01 20:02:26.000000000 +0200 +++ __UTRACE/kernel/utrace.c 2009-09-01 20:03:25.000000000 +0200 @@ -1086,7 +1086,6 @@ int utrace_control(struct task_struct *t break; case UTRACE_DETACH: - mark_engine_detached(engine); reset = reset || utrace_do_stop(target, utrace); if (!reset) { /* @@ -1106,9 +1105,9 @@ int utrace_control(struct task_struct *t * We need utrace_reset() to check if anyone else * still wants this target to stay stopped. */ - clear_engine_wants_stop(engine); reset = true; } + mark_engine_detached(engine); break; case UTRACE_RESUME: