diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-09 15:59:24 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-09 15:59:24 -0500 |
commit | db0c2bf69aa095d4a6de7b1145f29fe9a7c0f6a3 (patch) | |
tree | 8f38957c01b18edddd44d49ecc3beeac08a20b4e /kernel/signal.c | |
parent | ac69e0928054ff29a5049902fb477f9c7605c773 (diff) | |
parent | 0d19ea866562e46989412a0676412fa0983c9ce7 (diff) |
Merge branch 'for-3.3' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup
* 'for-3.3' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup: (21 commits)
cgroup: fix to allow mounting a hierarchy by name
cgroup: move assignement out of condition in cgroup_attach_proc()
cgroup: Remove task_lock() from cgroup_post_fork()
cgroup: add sparse annotation to cgroup_iter_start() and cgroup_iter_end()
cgroup: mark cgroup_rmdir_waitq and cgroup_attach_proc() as static
cgroup: only need to check oldcgrp==newgrp once
cgroup: remove redundant get/put of task struct
cgroup: remove redundant get/put of old css_set from migrate
cgroup: Remove unnecessary task_lock before fetching css_set on migration
cgroup: Drop task_lock(parent) on cgroup_fork()
cgroups: remove redundant get/put of css_set from css_set_check_fetched()
resource cgroups: remove bogus cast
cgroup: kill subsys->can_attach_task(), pre_attach() and attach_task()
cgroup, cpuset: don't use ss->pre_attach()
cgroup: don't use subsys->can_attach_task() or ->attach_task()
cgroup: introduce cgroup_taskset and use it in subsys->can_attach(), cancel_attach() and attach()
cgroup: improve old cgroup handling in cgroup_attach_proc()
cgroup: always lock threadgroup during migration
threadgroup: extend threadgroup_lock() to cover exit and exec
threadgroup: rename signal->threadgroup_fork_lock to ->group_rwsem
...
Fix up conflict in kernel/cgroup.c due to commit e0197aae59e5: "cgroups:
fix a css_set not found bug in cgroup_attach_proc" that already
mentioned that the bug is fixed (differently) in Tejun's cgroup
patchset. This one, in other words.
Diffstat (limited to 'kernel/signal.c')
-rw-r--r-- | kernel/signal.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/kernel/signal.c b/kernel/signal.c index 56ce3a618b28..bb0efa5705ed 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
@@ -2355,8 +2355,15 @@ void exit_signals(struct task_struct *tsk) | |||
2355 | int group_stop = 0; | 2355 | int group_stop = 0; |
2356 | sigset_t unblocked; | 2356 | sigset_t unblocked; |
2357 | 2357 | ||
2358 | /* | ||
2359 | * @tsk is about to have PF_EXITING set - lock out users which | ||
2360 | * expect stable threadgroup. | ||
2361 | */ | ||
2362 | threadgroup_change_begin(tsk); | ||
2363 | |||
2358 | if (thread_group_empty(tsk) || signal_group_exit(tsk->signal)) { | 2364 | if (thread_group_empty(tsk) || signal_group_exit(tsk->signal)) { |
2359 | tsk->flags |= PF_EXITING; | 2365 | tsk->flags |= PF_EXITING; |
2366 | threadgroup_change_end(tsk); | ||
2360 | return; | 2367 | return; |
2361 | } | 2368 | } |
2362 | 2369 | ||
@@ -2366,6 +2373,9 @@ void exit_signals(struct task_struct *tsk) | |||
2366 | * see wants_signal(), do_signal_stop(). | 2373 | * see wants_signal(), do_signal_stop(). |
2367 | */ | 2374 | */ |
2368 | tsk->flags |= PF_EXITING; | 2375 | tsk->flags |= PF_EXITING; |
2376 | |||
2377 | threadgroup_change_end(tsk); | ||
2378 | |||
2369 | if (!signal_pending(tsk)) | 2379 | if (!signal_pending(tsk)) |
2370 | goto out; | 2380 | goto out; |
2371 | 2381 | ||