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;
 }

Reply via email to