[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: Paul Jackson <pj@sgi.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
3148890bfa
commit
8c4b8add83
|
@ -1124,8 +1124,6 @@ static task_t *copy_process(unsigned long clone_flags,
|
|||
if (unlikely(p->ptrace & PT_PTRACED))
|
||||
__ptrace_link(p, current->parent);
|
||||
|
||||
cpuset_fork(p);
|
||||
|
||||
attach_pid(p, PIDTYPE_PID, p->pid);
|
||||
attach_pid(p, PIDTYPE_TGID, p->tgid);
|
||||
if (thread_group_leader(p)) {
|
||||
|
@ -1142,6 +1140,7 @@ static task_t *copy_process(unsigned long clone_flags,
|
|||
total_forks++;
|
||||
write_unlock_irq(&tasklist_lock);
|
||||
proc_fork_connector(p);
|
||||
cpuset_fork(p);
|
||||
retval = 0;
|
||||
|
||||
fork_out:
|
||||
|
|
Loading…
Reference in New Issue