|
@@ -1137,6 +1137,8 @@ static struct task_struct *copy_process(unsigned long clone_flags,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ ftrace_graph_init_task(p);
|
|
|
+
|
|
|
p->pid = pid_nr(pid);
|
|
|
p->tgid = p->pid;
|
|
|
if (clone_flags & CLONE_THREAD)
|
|
@@ -1145,7 +1147,7 @@ static struct task_struct *copy_process(unsigned long clone_flags,
|
|
|
if (current->nsproxy != p->nsproxy) {
|
|
|
retval = ns_cgroup_clone(p, pid);
|
|
|
if (retval)
|
|
|
- goto bad_fork_free_pid;
|
|
|
+ goto bad_fork_free_graph;
|
|
|
}
|
|
|
|
|
|
p->set_child_tid = (clone_flags & CLONE_CHILD_SETTID) ? child_tidptr : NULL;
|
|
@@ -1238,7 +1240,7 @@ static struct task_struct *copy_process(unsigned long clone_flags,
|
|
|
spin_unlock(¤t->sighand->siglock);
|
|
|
write_unlock_irq(&tasklist_lock);
|
|
|
retval = -ERESTARTNOINTR;
|
|
|
- goto bad_fork_free_pid;
|
|
|
+ goto bad_fork_free_graph;
|
|
|
}
|
|
|
|
|
|
if (clone_flags & CLONE_THREAD) {
|
|
@@ -1271,11 +1273,12 @@ static struct task_struct *copy_process(unsigned long clone_flags,
|
|
|
total_forks++;
|
|
|
spin_unlock(¤t->sighand->siglock);
|
|
|
write_unlock_irq(&tasklist_lock);
|
|
|
- ftrace_graph_init_task(p);
|
|
|
proc_fork_connector(p);
|
|
|
cgroup_post_fork(p);
|
|
|
return p;
|
|
|
|
|
|
+bad_fork_free_graph:
|
|
|
+ ftrace_graph_exit_task(p);
|
|
|
bad_fork_free_pid:
|
|
|
if (pid != &init_struct_pid)
|
|
|
free_pid(pid);
|