Commit 8c4b8add authored by Paul Jackson's avatar Paul Jackson Committed by Linus Torvalds

[PATCH] cpuset fork locking fix

Move the cpuset_fork() call below the write_unlock_irq call in
kernel/fork.c copy_process().

Since the cpuset-dual-semaphore-locking-overhaul.patch, the cpuset_fork()
routine acquires task_lock(), so cannot be called while holding the
tasklist_lock for write.
Signed-off-by: default avatarPaul Jackson <pj@sgi.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 3148890b
...@@ -1124,8 +1124,6 @@ static task_t *copy_process(unsigned long clone_flags, ...@@ -1124,8 +1124,6 @@ static task_t *copy_process(unsigned long clone_flags,
if (unlikely(p->ptrace & PT_PTRACED)) if (unlikely(p->ptrace & PT_PTRACED))
__ptrace_link(p, current->parent); __ptrace_link(p, current->parent);
cpuset_fork(p);
attach_pid(p, PIDTYPE_PID, p->pid); attach_pid(p, PIDTYPE_PID, p->pid);
attach_pid(p, PIDTYPE_TGID, p->tgid); attach_pid(p, PIDTYPE_TGID, p->tgid);
if (thread_group_leader(p)) { if (thread_group_leader(p)) {
...@@ -1142,6 +1140,7 @@ static task_t *copy_process(unsigned long clone_flags, ...@@ -1142,6 +1140,7 @@ static task_t *copy_process(unsigned long clone_flags,
total_forks++; total_forks++;
write_unlock_irq(&tasklist_lock); write_unlock_irq(&tasklist_lock);
proc_fork_connector(p); proc_fork_connector(p);
cpuset_fork(p);
retval = 0; retval = 0;
fork_out: fork_out:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment