lkml.org 
[lkml]   [2013]   [Nov]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 2/4] proc: change first_tid() to use while_each_thread() rather than next_thread()
    Rerwrite the main loop to use while_each_thread() instead of
    next_thread(). We are going to fix or replace while_each_thread(),
    next_thread() should be avoided whenever possible.

    Signed-off-by: Oleg Nesterov <oleg@redhat.com>
    ---
    fs/proc/base.c | 20 ++++++++++----------
    1 files changed, 10 insertions(+), 10 deletions(-)

    diff --git a/fs/proc/base.c b/fs/proc/base.c
    index da12c5c..7ab3785 100644
    --- a/fs/proc/base.c
    +++ b/fs/proc/base.c
    @@ -3100,23 +3100,23 @@ static struct task_struct *first_tid(struct task_struct *leader,
    }

    /* If nr exceeds the number of threads there is nothing todo */
    - pos = NULL;
    if (nr && nr >= get_nr_threads(leader))
    - goto out;
    + goto fail;
    /* It could be unhashed before we take rcu lock */
    if (!pid_alive(leader))
    - goto out;
    + goto fail;

    /* If we haven't found our starting place yet start
    * with the leader and walk nr threads forward.
    */
    - for (pos = leader; nr > 0; --nr) {
    - pos = next_thread(pos);
    - if (pos == leader) {
    - pos = NULL;
    - goto out;
    - }
    - }
    + pos = leader;
    + do {
    + if (nr-- <= 0)
    + goto found;
    + } while_each_thread(leader, pos);
    +fail:
    + pos = NULL;
    + goto out;
    found:
    get_task_struct(pos);
    out:
    --
    1.5.5.1


    \
     
     \ /
      Last update: 2013-11-21 02:21    [W:5.947 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site