utrace_wakeup() is called when utrace->stopped = T. This means the task
is either TASK_TRACED or killed. If it is killed, SIGNAL_STOP_STOPPED
is not possible and wake_up_state(__TASK_TRACED) does nothing.

No need to check task_is_stopped_or_traced().

Signed-off-by: Oleg Nesterov <o...@redhat.com>
---

 kernel/utrace.c |   13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

--- __UTRACE/kernel/utrace.c~7_WAKEUP_DONT_CK_STATE     2009-09-09 
01:29:02.000000000 +0200
+++ __UTRACE/kernel/utrace.c    2009-09-09 01:32:03.000000000 +0200
@@ -659,14 +659,13 @@ static void utrace_wakeup(struct task_st
 {
        utrace->stopped = 0;
 
+       /* The task must be either TASK_TRACED or killed */
        spin_lock_irq(&target->sighand->siglock);
-       if (likely(task_is_stopped_or_traced(target))) {
-               if (target->signal->flags & SIGNAL_STOP_STOPPED ||
-                   target->signal->group_stop_count)
-                       target->state = TASK_STOPPED;
-               else
-                       wake_up_state(target, __TASK_STOPPED | __TASK_TRACED);
-       }
+       if (target->signal->flags & SIGNAL_STOP_STOPPED ||
+           target->signal->group_stop_count)
+               target->state = TASK_STOPPED;
+       else
+               wake_up_state(target, __TASK_TRACED);
        spin_unlock_irq(&target->sighand->siglock);
 }
 

Reply via email to