diff options
Diffstat (limited to 'kernel/fork.c')
-rw-r--r-- | kernel/fork.c | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/kernel/fork.c b/kernel/fork.c index e6c04d462ab..bfee931ee3f 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -152,8 +152,7 @@ void __put_task_struct(struct task_struct *tsk) | |||
152 | WARN_ON(atomic_read(&tsk->usage)); | 152 | WARN_ON(atomic_read(&tsk->usage)); |
153 | WARN_ON(tsk == current); | 153 | WARN_ON(tsk == current); |
154 | 154 | ||
155 | put_cred(tsk->real_cred); | 155 | exit_creds(tsk); |
156 | put_cred(tsk->cred); | ||
157 | delayacct_tsk_free(tsk); | 156 | delayacct_tsk_free(tsk); |
158 | 157 | ||
159 | if (!profile_handoff_task(tsk)) | 158 | if (!profile_handoff_task(tsk)) |
@@ -1008,10 +1007,7 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
1008 | copy_flags(clone_flags, p); | 1007 | copy_flags(clone_flags, p); |
1009 | INIT_LIST_HEAD(&p->children); | 1008 | INIT_LIST_HEAD(&p->children); |
1010 | INIT_LIST_HEAD(&p->sibling); | 1009 | INIT_LIST_HEAD(&p->sibling); |
1011 | #ifdef CONFIG_PREEMPT_RCU | 1010 | rcu_copy_process(p); |
1012 | p->rcu_read_lock_nesting = 0; | ||
1013 | p->rcu_flipctr_idx = 0; | ||
1014 | #endif /* #ifdef CONFIG_PREEMPT_RCU */ | ||
1015 | p->vfork_done = NULL; | 1011 | p->vfork_done = NULL; |
1016 | spin_lock_init(&p->alloc_lock); | 1012 | spin_lock_init(&p->alloc_lock); |
1017 | 1013 | ||
@@ -1297,8 +1293,7 @@ bad_fork_cleanup_put_domain: | |||
1297 | module_put(task_thread_info(p)->exec_domain->module); | 1293 | module_put(task_thread_info(p)->exec_domain->module); |
1298 | bad_fork_cleanup_count: | 1294 | bad_fork_cleanup_count: |
1299 | atomic_dec(&p->cred->user->processes); | 1295 | atomic_dec(&p->cred->user->processes); |
1300 | put_cred(p->real_cred); | 1296 | exit_creds(p); |
1301 | put_cred(p->cred); | ||
1302 | bad_fork_free: | 1297 | bad_fork_free: |
1303 | free_task(p); | 1298 | free_task(p); |
1304 | fork_out: | 1299 | fork_out: |