From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753918AbdKQA37 (ORCPT ); Thu, 16 Nov 2017 19:29:59 -0500 Received: from mail-qt0-f196.google.com ([209.85.216.196]:40835 "EHLO mail-qt0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753831AbdKQA34 (ORCPT ); Thu, 16 Nov 2017 19:29:56 -0500 X-Google-Smtp-Source: AGs4zMbJigruHP+U/6AbskqtloaMKsBMU67KHbQvfU+O3V7ykk4ds4QhqeL6+yaPZEwrs0kST3OPhA== From: Marcos Paulo de Souza Cc: Marcos Paulo de Souza , Andrew Morton , Ingo Molnar , Rik van Riel , Michal Hocko , Peter Zijlstra , Oleg Nesterov , linux-kernel@vger.kernel.org Subject: [PATCH -next] fork.c: Check error and return early Date: Thu, 16 Nov 2017 22:28:08 -0200 Message-Id: <20171117002929.5155-1-marcos.souza.org@gmail.com> X-Mailer: git-send-email 2.13.6 To: unlisted-recipients:; (no To-header on input) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Thus reducing one indentation level while maintaining the same rationale. Signed-off-by: Marcos Paulo de Souza --- kernel/fork.c | 51 +++++++++++++++++++++++++-------------------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/kernel/fork.c b/kernel/fork.c index 3cefe81b50f2..2113e252cb9d 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -2068,6 +2068,8 @@ long _do_fork(unsigned long clone_flags, int __user *child_tidptr, unsigned long tls) { + struct completion vfork; + struct pid *pid; struct task_struct *p; int trace = 0; long nr; @@ -2093,43 +2095,40 @@ long _do_fork(unsigned long clone_flags, p = copy_process(clone_flags, stack_start, stack_size, child_tidptr, NULL, trace, tls, NUMA_NO_NODE); add_latent_entropy(); + + if (IS_ERR(p)) + return PTR_ERR(p); + /* * Do this prior waking up the new thread - the thread pointer * might get invalid after that point, if the thread exits quickly. */ - if (!IS_ERR(p)) { - struct completion vfork; - struct pid *pid; - - trace_sched_process_fork(current, p); + trace_sched_process_fork(current, p); - pid = get_task_pid(p, PIDTYPE_PID); - nr = pid_vnr(pid); + pid = get_task_pid(p, PIDTYPE_PID); + nr = pid_vnr(pid); - if (clone_flags & CLONE_PARENT_SETTID) - put_user(nr, parent_tidptr); - - if (clone_flags & CLONE_VFORK) { - p->vfork_done = &vfork; - init_completion(&vfork); - get_task_struct(p); - } + if (clone_flags & CLONE_PARENT_SETTID) + put_user(nr, parent_tidptr); - wake_up_new_task(p); + if (clone_flags & CLONE_VFORK) { + p->vfork_done = &vfork; + init_completion(&vfork); + get_task_struct(p); + } - /* forking complete and child started to run, tell ptracer */ - if (unlikely(trace)) - ptrace_event_pid(trace, pid); + wake_up_new_task(p); - if (clone_flags & CLONE_VFORK) { - if (!wait_for_vfork_done(p, &vfork)) - ptrace_event_pid(PTRACE_EVENT_VFORK_DONE, pid); - } + /* forking complete and child started to run, tell ptracer */ + if (unlikely(trace)) + ptrace_event_pid(trace, pid); - put_pid(pid); - } else { - nr = PTR_ERR(p); + if (clone_flags & CLONE_VFORK) { + if (!wait_for_vfork_done(p, &vfork)) + ptrace_event_pid(PTRACE_EVENT_VFORK_DONE, pid); } + + put_pid(pid); return nr; } -- 2.13.6