aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/fork.c
diff options
context:
space:
mode:
authorRolf Eike Beer <eb@emlix.com>2021-05-06 18:04:25 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2021-05-06 19:24:13 -0700
commita6895399380ab58d9efd0a0bec2fcb98d77e20bd (patch)
tree6235e6d18cb73d6c97a5b641782b26c5b8bde237 /kernel/fork.c
parentdo_wait: make PIDTYPE_PID case O(1) instead of O(n) (diff)
downloadlinux-dev-a6895399380ab58d9efd0a0bec2fcb98d77e20bd.tar.xz
linux-dev-a6895399380ab58d9efd0a0bec2fcb98d77e20bd.zip
kernel/fork.c: simplify copy_mm()
All this can happen without a single goto. Link: https://lkml.kernel.org/r/2072685.XptgVkyDqn@devpool47 Signed-off-by: Rolf Eike Beer <eb@emlix.com> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel/fork.c')
-rw-r--r--kernel/fork.c15
1 files changed, 4 insertions, 11 deletions
diff --git a/kernel/fork.c b/kernel/fork.c
index 771e0ea90499..784f7ca7c17e 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -1396,7 +1396,6 @@ fail_nomem:
static int copy_mm(unsigned long clone_flags, struct task_struct *tsk)
{
struct mm_struct *mm, *oldmm;
- int retval;
tsk->min_flt = tsk->maj_flt = 0;
tsk->nvcsw = tsk->nivcsw = 0;
@@ -1423,21 +1422,15 @@ static int copy_mm(unsigned long clone_flags, struct task_struct *tsk)
if (clone_flags & CLONE_VM) {
mmget(oldmm);
mm = oldmm;
- goto good_mm;
+ } else {
+ mm = dup_mm(tsk, current->mm);
+ if (!mm)
+ return -ENOMEM;
}
- retval = -ENOMEM;
- mm = dup_mm(tsk, current->mm);
- if (!mm)
- goto fail_nomem;
-
-good_mm:
tsk->mm = mm;
tsk->active_mm = mm;
return 0;
-
-fail_nomem:
- return retval;
}
static int copy_fs(unsigned long clone_flags, struct task_struct *tsk)