futex_find_get_task: don't take tasklist_lock
PATCH 2/3 futex_find_get_task: don't take tasklist_lock
It is ok to do find_task_by_pid() + get_task_struct() under rcu_read_lock(), we cand drop tasklist_lock.
Note that testing of ->exit_state is racy with or without tasklist anyway.
Signed-off-by Oleg Nesterov <[email protected]>
kernel/futex.c renamed from kernel/futex.c~2_ffgt +2 -2
@@ -389,7 +389,7 @@ static struct task_struct * futex_find_g {struct task_struct *p; -read_lock (&tasklist_lock); +rcu_read_lock (); p =find_task_by_pid (pid);if (!p) goto out_unlock;
@@ -403,7 +403,7 @@ static struct task_struct * futex_find_g }get_task_struct (p); out_unlock: -read_unlock (&tasklist_lock); +rcu_read_unlock ();return p; }
Quoted 7 lines · Oleg Nesterov
It is ok to do
find_task_by_pid()+get_task_struct()underrcu_read_lock(), we cand droptasklist_lock.Note that testing of ->exit_state is racy with or without tasklist anyway.
Signed-off-by Oleg Nesterov <[email protected]>
yeah. (We did this in the -rt tree for some time too, never saw any problems.)
Acked-by Ingo Molnar <[email protected]>
Ingo