aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/fork.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/fork.c')
-rw-r--r--kernel/fork.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/kernel/fork.c b/kernel/fork.c
index b1341205be27..03975d0467f9 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -1315,17 +1315,19 @@ long do_fork(unsigned long clone_flags,
1315{ 1315{
1316 struct task_struct *p; 1316 struct task_struct *p;
1317 int trace = 0; 1317 int trace = 0;
1318 long pid = alloc_pidmap(); 1318 struct pid *pid = alloc_pid();
1319 long nr;
1319 1320
1320 if (pid < 0) 1321 if (!pid)
1321 return -EAGAIN; 1322 return -EAGAIN;
1323 nr = pid->nr;
1322 if (unlikely(current->ptrace)) { 1324 if (unlikely(current->ptrace)) {
1323 trace = fork_traceflag (clone_flags); 1325 trace = fork_traceflag (clone_flags);
1324 if (trace) 1326 if (trace)
1325 clone_flags |= CLONE_PTRACE; 1327 clone_flags |= CLONE_PTRACE;
1326 } 1328 }
1327 1329
1328 p = copy_process(clone_flags, stack_start, regs, stack_size, parent_tidptr, child_tidptr, pid); 1330 p = copy_process(clone_flags, stack_start, regs, stack_size, parent_tidptr, child_tidptr, nr);
1329 /* 1331 /*
1330 * Do this prior waking up the new thread - the thread pointer 1332 * Do this prior waking up the new thread - the thread pointer
1331 * might get invalid after that point, if the thread exits quickly. 1333 * might get invalid after that point, if the thread exits quickly.
@@ -1352,7 +1354,7 @@ long do_fork(unsigned long clone_flags,
1352 p->state = TASK_STOPPED; 1354 p->state = TASK_STOPPED;
1353 1355
1354 if (unlikely (trace)) { 1356 if (unlikely (trace)) {
1355 current->ptrace_message = pid; 1357 current->ptrace_message = nr;
1356 ptrace_notify ((trace << 8) | SIGTRAP); 1358 ptrace_notify ((trace << 8) | SIGTRAP);
1357 } 1359 }
1358 1360
@@ -1362,10 +1364,10 @@ long do_fork(unsigned long clone_flags,
1362 ptrace_notify ((PTRACE_EVENT_VFORK_DONE << 8) | SIGTRAP); 1364 ptrace_notify ((PTRACE_EVENT_VFORK_DONE << 8) | SIGTRAP);
1363 } 1365 }
1364 } else { 1366 } else {
1365 free_pidmap(pid); 1367 free_pid(pid);
1366 pid = PTR_ERR(p); 1368 nr = PTR_ERR(p);
1367 } 1369 }
1368 return pid; 1370 return nr;
1369} 1371}
1370 1372
1371#ifndef ARCH_MIN_MMSTRUCT_ALIGN 1373#ifndef ARCH_MIN_MMSTRUCT_ALIGN