diff options
Diffstat (limited to 'kernel/fork.c')
| -rw-r--r-- | kernel/fork.c | 21 | 
1 files changed, 9 insertions, 12 deletions
| diff --git a/kernel/fork.c b/kernel/fork.c index f97f2c449f5c..6774e6b2e96d 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -380,6 +380,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)  #endif  	tsk->splice_pipe = NULL;  	tsk->task_frag.page = NULL; +	tsk->wake_q.next = NULL;  	account_kernel_stack(ti, 1); @@ -1249,7 +1250,6 @@ static struct task_struct *copy_process(unsigned long clone_flags,  {  	int retval;  	struct task_struct *p; -	void *cgrp_ss_priv[CGROUP_CANFORK_COUNT] = {};  	if ((clone_flags & (CLONE_NEWNS|CLONE_FS)) == (CLONE_NEWNS|CLONE_FS))  		return ERR_PTR(-EINVAL); @@ -1348,9 +1348,9 @@ static struct task_struct *copy_process(unsigned long clone_flags,  	prev_cputime_init(&p->prev_cputime);  #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN -	seqlock_init(&p->vtime_seqlock); +	seqcount_init(&p->vtime_seqcount);  	p->vtime_snap = 0; -	p->vtime_snap_whence = VTIME_SLEEPING; +	p->vtime_snap_whence = VTIME_INACTIVE;  #endif  #if defined(SPLIT_RSS_COUNTING) @@ -1368,8 +1368,7 @@ static struct task_struct *copy_process(unsigned long clone_flags,  	p->real_start_time = ktime_get_boot_ns();  	p->io_context = NULL;  	p->audit_context = NULL; -	if (clone_flags & CLONE_THREAD) -		threadgroup_change_begin(current); +	threadgroup_change_begin(current);  	cgroup_fork(p);  #ifdef CONFIG_NUMA  	p->mempolicy = mpol_dup(p->mempolicy); @@ -1527,7 +1526,7 @@ static struct task_struct *copy_process(unsigned long clone_flags,  	 * between here and cgroup_post_fork() if an organisation operation is in  	 * progress.  	 */ -	retval = cgroup_can_fork(p, cgrp_ss_priv); +	retval = cgroup_can_fork(p);  	if (retval)  		goto bad_fork_free_pid; @@ -1609,9 +1608,8 @@ static struct task_struct *copy_process(unsigned long clone_flags,  	write_unlock_irq(&tasklist_lock);  	proc_fork_connector(p); -	cgroup_post_fork(p, cgrp_ss_priv); -	if (clone_flags & CLONE_THREAD) -		threadgroup_change_end(current); +	cgroup_post_fork(p); +	threadgroup_change_end(current);  	perf_event_fork(p);  	trace_task_newtask(p, clone_flags); @@ -1620,7 +1618,7 @@ static struct task_struct *copy_process(unsigned long clone_flags,  	return p;  bad_fork_cancel_cgroup: -	cgroup_cancel_fork(p, cgrp_ss_priv); +	cgroup_cancel_fork(p);  bad_fork_free_pid:  	if (pid != &init_struct_pid)  		free_pid(pid); @@ -1652,8 +1650,7 @@ bad_fork_cleanup_policy:  	mpol_put(p->mempolicy);  bad_fork_cleanup_threadgroup_lock:  #endif -	if (clone_flags & CLONE_THREAD) -		threadgroup_change_end(current); +	threadgroup_change_end(current);  	delayacct_tsk_free(p);  bad_fork_cleanup_count:  	atomic_dec(&p->cred->user->processes); | 
