aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/fork.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/fork.c')
-rw-r--r--kernel/fork.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/kernel/fork.c b/kernel/fork.c
index 5721f0e3f2da..294189fc7ac8 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -1087,8 +1087,10 @@ static void rt_mutex_init_task(struct task_struct *p)
1087{ 1087{
1088 raw_spin_lock_init(&p->pi_lock); 1088 raw_spin_lock_init(&p->pi_lock);
1089#ifdef CONFIG_RT_MUTEXES 1089#ifdef CONFIG_RT_MUTEXES
1090 plist_head_init(&p->pi_waiters); 1090 p->pi_waiters = RB_ROOT;
1091 p->pi_waiters_leftmost = NULL;
1091 p->pi_blocked_on = NULL; 1092 p->pi_blocked_on = NULL;
1093 p->pi_top_task = NULL;
1092#endif 1094#endif
1093} 1095}
1094 1096
@@ -1172,7 +1174,7 @@ static struct task_struct *copy_process(unsigned long clone_flags,
1172 * do not allow it to share a thread group or signal handlers or 1174 * do not allow it to share a thread group or signal handlers or
1173 * parent with the forking task. 1175 * parent with the forking task.
1174 */ 1176 */
1175 if (clone_flags & (CLONE_SIGHAND | CLONE_PARENT)) { 1177 if (clone_flags & CLONE_SIGHAND) {
1176 if ((clone_flags & (CLONE_NEWUSER | CLONE_NEWPID)) || 1178 if ((clone_flags & (CLONE_NEWUSER | CLONE_NEWPID)) ||
1177 (task_active_pid_ns(current) != 1179 (task_active_pid_ns(current) !=
1178 current->nsproxy->pid_ns_for_children)) 1180 current->nsproxy->pid_ns_for_children))
@@ -1311,7 +1313,9 @@ static struct task_struct *copy_process(unsigned long clone_flags,
1311#endif 1313#endif
1312 1314
1313 /* Perform scheduler related setup. Assign this task to a CPU. */ 1315 /* Perform scheduler related setup. Assign this task to a CPU. */
1314 sched_fork(clone_flags, p); 1316 retval = sched_fork(clone_flags, p);
1317 if (retval)
1318 goto bad_fork_cleanup_policy;
1315 1319
1316 retval = perf_event_init_task(p); 1320 retval = perf_event_init_task(p);
1317 if (retval) 1321 if (retval)
@@ -1403,13 +1407,11 @@ static struct task_struct *copy_process(unsigned long clone_flags,
1403 p->tgid = p->pid; 1407 p->tgid = p->pid;
1404 } 1408 }
1405 1409
1406 p->pdeath_signal = 0;
1407 p->exit_state = 0;
1408
1409 p->nr_dirtied = 0; 1410 p->nr_dirtied = 0;
1410 p->nr_dirtied_pause = 128 >> (PAGE_SHIFT - 10); 1411 p->nr_dirtied_pause = 128 >> (PAGE_SHIFT - 10);
1411 p->dirty_paused_when = 0; 1412 p->dirty_paused_when = 0;
1412 1413
1414 p->pdeath_signal = 0;
1413 INIT_LIST_HEAD(&p->thread_group); 1415 INIT_LIST_HEAD(&p->thread_group);
1414 p->task_works = NULL; 1416 p->task_works = NULL;
1415 1417