finish_utrace_stop() can check ->stopped lockless. It was set by us, we can't miss it.
Signed-off-by: Oleg Nesterov <o...@redhat.com> ---- kernel/utrace.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --- __UTRACE/kernel/utrace.c~5_FINISH_STOP 2009-07-31 02:29:32.000000000 +0200 +++ __UTRACE/kernel/utrace.c 2009-07-31 02:35:50.000000000 +0200 @@ -353,8 +353,8 @@ static inline bool finish_utrace_stop(st * utrace_wakeup() clears @utrace->stopped before waking us up. * We're officially awake if it's clear. */ - spin_lock(&utrace->lock); if (unlikely(utrace->stopped)) { + spin_lock(&utrace->lock); /* * If we're here with it still set, it must have been * signal_wake_up() instead, waking us up for a SIGKILL. @@ -364,8 +364,8 @@ static inline bool finish_utrace_stop(st spin_unlock_irq(&task->sighand->siglock); utrace->stopped = 0; killed = true; + spin_unlock(&utrace->lock); } - spin_unlock(&utrace->lock); return killed; }