Refactoring, no functionality change.
Signed-off-by: Kirill Tkhai <[email protected]>
---
kernel/exit.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/kernel/exit.c b/kernel/exit.c
index a268093..c84f3e4 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -1538,8 +1538,7 @@ static long do_wait(struct wait_opts *wo)
set_current_state(TASK_INTERRUPTIBLE);
read_lock(&tasklist_lock);
- tsk = current;
- do {
+ for_each_thread(current, tsk) {
retval = do_wait_thread(wo, tsk);
if (retval)
goto end;
@@ -1550,7 +1549,7 @@ static long do_wait(struct wait_opts *wo)
if (wo->wo_flags & __WNOTHREAD)
break;
- } while_each_thread(current, tsk);
+ }
read_unlock(&tasklist_lock);
notask:
On 05/25, Kirill Tkhai wrote:
>
> Refactoring, no functionality change.
Hmm. unless I missed something this change is wrong.
> --- a/kernel/exit.c
> +++ b/kernel/exit.c
> @@ -1538,8 +1538,7 @@ static long do_wait(struct wait_opts *wo)
>
> set_current_state(TASK_INTERRUPTIBLE);
> read_lock(&tasklist_lock);
> - tsk = current;
> - do {
> + for_each_thread(current, tsk) {
> retval = do_wait_thread(wo, tsk);
> if (retval)
> goto end;
> @@ -1550,7 +1549,7 @@ static long do_wait(struct wait_opts *wo)
>
> if (wo->wo_flags & __WNOTHREAD)
> break;
> - } while_each_thread(current, tsk);
> + }
Please note the __WNOTHREAD check. This is the rare case when we
actually want while_each_thread() (although it should die anyway).
for_each_thread() always starts from ->group_leader, but we need
to start from "current" first.
Oleg.