public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH -mm 1/3] proc: get_nr_threads() doesn't need ->siglock any longer
@ 2010-03-22 18:41 Oleg Nesterov
  2010-04-09 19:48 ` Roland McGrath
  0 siblings, 1 reply; 2+ messages in thread
From: Oleg Nesterov @ 2010-03-22 18:41 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Alexey Dobriyan, Eric W. Biederman, Roland McGrath, linux-kernel

Now that task->signal can't go away get_nr_threads() doesn't need
->siglock to read signal->count.

Also, make it inline, move into sched.h, and convert 2 other proc
users of signal->count to use this (now trivial) helper.

Henceforth get_nr_threads() is the only valid user of signal->count,
we are ready to turn it into "int nr_threads" or, perhaps, kill it.

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

 include/linux/sched.h |    5 +++++
 fs/proc/array.c       |    4 ++--
 fs/proc/base.c        |   12 ------------
 3 files changed, 7 insertions(+), 14 deletions(-)

--- 34-rc1/include/linux/sched.h~PROC_1_GNT_DONT_USE_SIGLOCK	2010-03-22 16:35:43.000000000 +0100
+++ 34-rc1/include/linux/sched.h	2010-03-22 16:41:53.000000000 +0100
@@ -2148,6 +2148,11 @@ extern bool current_is_single_threaded(v
 #define while_each_thread(g, t) \
 	while ((t = next_thread(t)) != g)
 
+static inline int get_nr_threads(struct task_struct *tsk)
+{
+	return atomic_read(&tsk->signal->count);
+}
+
 /* de_thread depends on thread_group_leader not being a pid based check */
 #define thread_group_leader(p)	(p == p->group_leader)
 
--- 34-rc1/fs/proc/array.c~PROC_1_GNT_DONT_USE_SIGLOCK	2010-03-11 13:11:50.000000000 +0100
+++ 34-rc1/fs/proc/array.c	2010-03-22 17:04:44.000000000 +0100
@@ -269,7 +269,7 @@ static inline void task_sig(struct seq_f
 		shpending = p->signal->shared_pending.signal;
 		blocked = p->blocked;
 		collect_sigign_sigcatch(p, &ignored, &caught);
-		num_threads = atomic_read(&p->signal->count);
+		num_threads = get_nr_threads(p);
 		rcu_read_lock();  /* FIXME: is this correct? */
 		qsize = atomic_read(&__task_cred(p)->user->sigpending);
 		rcu_read_unlock();
@@ -412,7 +412,7 @@ static int do_task_stat(struct seq_file 
 			tty_nr = new_encode_dev(tty_devnum(sig->tty));
 		}
 
-		num_threads = atomic_read(&sig->count);
+		num_threads = get_nr_threads(task);
 		collect_sigign_sigcatch(task, &sigign, &sigcatch);
 
 		cmin_flt = sig->cmin_flt;
--- 34-rc1/fs/proc/base.c~PROC_1_GNT_DONT_USE_SIGLOCK	2010-03-22 16:35:43.000000000 +0100
+++ 34-rc1/fs/proc/base.c	2010-03-22 16:36:28.000000000 +0100
@@ -165,18 +165,6 @@ static int get_fs_path(struct task_struc
 	return result;
 }
 
-static int get_nr_threads(struct task_struct *tsk)
-{
-	unsigned long flags;
-	int count = 0;
-
-	if (lock_task_sighand(tsk, &flags)) {
-		count = atomic_read(&tsk->signal->count);
-		unlock_task_sighand(tsk, &flags);
-	}
-	return count;
-}
-
 static int proc_cwd_link(struct inode *inode, struct path *path)
 {
 	struct task_struct *task = get_proc_task(inode);


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH -mm 1/3] proc: get_nr_threads() doesn't need ->siglock any longer
  2010-03-22 18:41 [PATCH -mm 1/3] proc: get_nr_threads() doesn't need ->siglock any longer Oleg Nesterov
@ 2010-04-09 19:48 ` Roland McGrath
  0 siblings, 0 replies; 2+ messages in thread
From: Roland McGrath @ 2010-04-09 19:48 UTC (permalink / raw)
  To: Oleg Nesterov
  Cc: Andrew Morton, Alexey Dobriyan, Eric W. Biederman, linux-kernel

Acked-by: Roland McGrath <roland@redhat.com>

I'm not entirely sure about the name, but it's probably fine.  There should
be some comments somewhere making clear what "nr" or kind of threads this
refers to.  This is threads created and not yet reaped.  It differs from
the "threads not yet exited" (signal->live) count only during some races
around exit time, and when ptrace is preventing self-reaping.


Thanks,
Roland

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2010-04-09 19:49 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-22 18:41 [PATCH -mm 1/3] proc: get_nr_threads() doesn't need ->siglock any longer Oleg Nesterov
2010-04-09 19:48 ` Roland McGrath

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox