lkml.org 
[lkml]   [2011]   [Dec]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: Q: cgroup: Questions about possible issues in cgroup locking
On Wed, Dec 21, 2011 at 02:08:48PM +0100, Oleg Nesterov wrote:
> On 12/21, Frederic Weisbecker wrote:
> > Hi,
> >
> > Starring at some parts of cgroups, I have a few questions:
> >
> > - Is cgroup_enable_task_cg_list()'s while_each_thread() safe
> > against concurrent exec()? The leader may change in de_thread()
> > and invalidate the test done in while_each_thread().
>
> Yes. Oh, we need to do something with while_each_thread.

Would something like this work?

diff --git a/include/linux/sched.h b/include/linux/sched.h
index c0c5876..e002a00 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -2293,8 +2293,12 @@ extern bool current_is_single_threaded(void);
#define do_each_thread(g, t) \
for (g = t = &init_task ; (g = t = next_task(g)) != &init_task ; ) do

-#define while_each_thread(g, t) \
- while ((t = next_thread(t)) != g)
+#define while_each_thread(g, t) \
+ while (({ \
+ struct task_struct *__prev = t; \
+ t = next_thread(t); \
+ t != __prev && t != g; \
+ }))

static inline int get_nr_threads(struct task_struct *tsk)
{

\
 
 \ /
  Last update: 2011-12-21 18:59    [W:0.443 / U:0.792 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site