From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932186AbdLQVqs (ORCPT ); Sun, 17 Dec 2017 16:46:48 -0500 Received: from mail-io0-f175.google.com ([209.85.223.175]:45224 "EHLO mail-io0-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757510AbdLQVqq (ORCPT ); Sun, 17 Dec 2017 16:46:46 -0500 X-Google-Smtp-Source: ACJfBou3ENQrHQGRA+IgrVIZJ2sLZbwmzhGYR/aBMVURUNwz/Puf59aJfQo/qn5X5NYHUom/O++0ZAfmKk+J/AQrus4= MIME-Version: 1.0 In-Reply-To: <1513474017.31581.22.camel@perches.com> References: <20171208223654.GP5858@dastard> <1512838818.26342.7.camel@perches.com> <20171211214300.GT5858@dastard> <1513030348.3036.5.camel@perches.com> <20171211224301.GA3925@bombadil.infradead.org> <1513474017.31581.22.camel@perches.com> From: Linus Torvalds Date: Sun, 17 Dec 2017 13:46:45 -0800 X-Google-Sender-Auth: 2ple5I9gU98-6i_x9rey2iw3Vos Message-ID: Subject: Re: [RFC patch] checkpatch: Add a test for long function definitions (>200 lines) To: Joe Perches Cc: Andrew Morton , Linux Kernel Mailing List , Dan Carpenter , Jonathan Corbet , Matthew Wilcox Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, Dec 16, 2017 at 5:26 PM, Joe Perches wrote: >> >> I'm not expecting you to be able to write a perl script that checks >> the first line, but we have way too many 200-plus line functions in >> the kernel. I'd like a warning on anything over 200 lines (a factor >> of 4 over Linus's stated goal). > > In response to Matthew's request: > > This is a possible checkpatch warning for long > function definitions. So I'm not sure a line count makes sense. Sometimes long functions can be sensible, if they are basically just one big case-statement or similar. Looking at one of your examples: futex_requeue() is indeed a long function, but that's mainly because it has a lot of comments about exactly what is going on, and while it only has one (fairly small) case statement, the rest of it is very similar (ie "in this case, do XYZ"). Another case I looked at - try_to_unmap_one() - had very similar behavior. It's long, but it's not long for the wrong reasons. And yes, "copy_process()" is disgusting, and probably _could_ be split up a bit, but at the same time the bulk of the lines there really is just the "initialize all the parts of the "struct task_struct". And other times, I suspect even a 50-line function is way too dense, just because it's doing crazy things. So I have a really hard time with some arbitrary line limit. At eh very least, I think it should ignore comments and whitespace lines. And yes, some real "complexity analysis" might give a much more sane limit, but I don't even know what that would be or how it would work. LInus