summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorOleg Nesterov <oleg@redhat.com>2014-01-10 12:42:02 +1100
committerStephen Rothwell <sfr@canb.auug.org.au>2014-01-10 12:42:02 +1100
commitd61cb20181f44828325dc0b39b9502a795d07cb2 (patch)
tree4eff83d432a54be76b083047ae1536717a417d5a /fs
parentdfc32058ff1639fd52c99320aba25d4e72357f25 (diff)
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> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Cc: Michal Hocko <mhocko@suse.cz> Cc: Sameer Nanda <snanda@chromium.org> Cc: Sergey Dyasly <dserrg@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'fs')
-rw-r--r--fs/proc/base.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/fs/proc/base.c b/fs/proc/base.c
index f223a56e613c..be8e17cabfc7 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -3106,23 +3106,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: