From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755393AbcI2Lr0 (ORCPT ); Thu, 29 Sep 2016 07:47:26 -0400 Received: from userp1040.oracle.com ([156.151.31.81]:19745 "EHLO userp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754089AbcI2LrR (ORCPT ); Thu, 29 Sep 2016 07:47:17 -0400 Subject: Re: [PATCH v2 5/8] pipe: simplify logic in alloc_pipe_info() To: "Michael Kerrisk (man-pages)" , Andrew Morton References: Cc: Willy Tarreau , socketpair@gmail.com, Tetsuo Handa , Jens Axboe , Al Viro , linux-api@vger.kernel.org, linux-kernel@vger.kernel.org From: Vegard Nossum Message-ID: <1e567c77-e33d-a8e3-83b5-346230e6acfa@oracle.com> Date: Thu, 29 Sep 2016 13:46:40 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Source-IP: userv0022.oracle.com [156.151.31.74] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 08/29/2016 02:21 AM, Michael Kerrisk (man-pages) wrote: > Replace an 'if' block that covers most of the code in this function > with a 'goto'. This makes the code a little simpler to read, and also > simplifies the next patch (fix limit checking in alloc_pipe_info()) > > Cc: Willy Tarreau > Cc: Vegard Nossum > Cc: socketpair@gmail.com > Cc: Tetsuo Handa > Cc: Jens Axboe > Cc: Al Viro > Cc: linux-api@vger.kernel.org > Cc: linux-kernel@vger.kernel.org > Signed-off-by: Michael Kerrisk > --- > fs/pipe.c | 45 +++++++++++++++++++++++---------------------- > 1 file changed, 23 insertions(+), 22 deletions(-) > > diff --git a/fs/pipe.c b/fs/pipe.c > index f45a173..256fc5a 100644 > --- a/fs/pipe.c > +++ b/fs/pipe.c > @@ -625,33 +625,34 @@ static bool too_many_pipe_buffers_hard(struct user_struct *user) > struct pipe_inode_info *alloc_pipe_info(void) > { > struct pipe_inode_info *pipe; > + unsigned long pipe_bufs = PIPE_DEF_BUFFERS; > + struct user_struct *user = get_current_user(); > > pipe = kzalloc(sizeof(struct pipe_inode_info), GFP_KERNEL_ACCOUNT); > - if (pipe) { > - unsigned long pipe_bufs = PIPE_DEF_BUFFERS; > - struct user_struct *user = get_current_user(); > - > - if (!too_many_pipe_buffers_hard(user)) { > - if (too_many_pipe_buffers_soft(user)) > - pipe_bufs = 1; > - pipe->bufs = kcalloc(pipe_bufs, > - sizeof(struct pipe_buffer), > - GFP_KERNEL_ACCOUNT); > - } > + if (pipe == NULL) > + goto out_free_uid; if (!pipe) would probably be more canonical, but I don't know anybody really cares. Vegard