Again, I am not sure this make sense as a cleanup, up to you. But utrace_release_task() can check UTRACE_EVENT(REAP) and optimize out utrace_reap() when there are no attached engines.
Signed-off-by: Oleg Nesterov <o...@redhat.com> --- kernel/utrace.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) --- __UTRACE/kernel/utrace.c~4_CK_REAP 2009-09-06 15:06:23.000000000 +0200 +++ __UTRACE/kernel/utrace.c 2009-09-06 15:37:33.000000000 +0200 @@ -442,7 +442,9 @@ void utrace_release_task(struct task_str utrace->reap = 1; - if (!(target->utrace_flags & _UTRACE_DEATH_EVENTS)) { + if ((target->utrace_flags & + (UTRACE_EVENT(REAP) & _UTRACE_DEATH_EVENTS)) == + UTRACE_EVENT(REAP)) { utrace_reap(target, utrace); /* Unlocks and frees. */ return; }