Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932073AbbBYTKG (ORCPT ); Wed, 25 Feb 2015 14:10:06 -0500 Received: from mout.gmx.net ([212.227.15.19]:55442 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752900AbbBYTKD (ORCPT ); Wed, 25 Feb 2015 14:10:03 -0500 Message-ID: <54EE1DA8.7030504@gmx.de> Date: Wed, 25 Feb 2015 20:08:24 +0100 From: Heinrich Schuchardt User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.4.0 MIME-Version: 1.0 To: Ingo Molnar , David Rientjes CC: Andrew Morton , Aaron Tomlin , Andy Lutomirski , Davidlohr Bueso , "David S. Miller" , Fabian Frederick , Guenter Roeck , "H. Peter Anvin" , Jens Axboe , Joe Perches , Johannes Weiner , Kees Cook , Michael Marineau , Oleg Nesterov , "Paul E. McKenney" , Peter Zijlstra , Prarit Bhargava , Rik van Riel , Rusty Russell , Steven Rostedt , Thomas Gleixner , Vladimir Davydov , linux-kernel@vger.kernel.org Subject: Re: [PATCH 1/3 v5] kernel/fork.c: new function for max_threads References: <1424722477-23758-1-git-send-email-xypron.glpk@gmx.de> <1424806701-30099-1-git-send-email-xypron.glpk@gmx.de> <1424806701-30099-2-git-send-email-xypron.glpk@gmx.de> <54ECEBD0.9060800@gmx.de> <20150225101751.GB7134@gmail.com> In-Reply-To: <20150225101751.GB7134@gmail.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:r50admuJ5A5utqzm1ZodI3Lmy0LjjaYcqZ4tqMUVVAYygG/oaSb rN67S9FcCrYnkIbHUO45Hox3JHAO96XLd2HCkRzQUc2/AZvIpj9HBEYl8wKiSjZ6JGbCZri 5meZe7ZGib7on2iFAHZRuQBWkobyizqezOePr7rZc7X3JRFkkMFxj6olv7uOT6Re2kym+kF 1FHRyrtuw1A/pRO12HkYw== X-UI-Out-Filterresults: notjunk:1; Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3616 Lines: 95 On 25.02.2015 11:17, Ingo Molnar wrote: > > * David Rientjes wrote: > >> The problem is with the structure of your patchset. You >> want three patches. There's one bugfix patch, a >> preparation patch, and a feature patch. The bugfix patch >> should come first so that it can be applied, possibly, to >> stable kernels and doesn't depend on unnecessary >> preparation patches for features. >> >> 1/3: change the implementation of fork_init(), with >> commentary, to avoid the divide by zero on certain >> arches, enforce the limits, and deal with variable types >> to prevent overflow. This is the most urgent patch and >> fixes a bug. >> >> 2/3: simply extract the fixed fork_init() implementation >> into a new set_max_threads() in preparation to use it for >> threads-max, (hint: UINT_MAX and ignored arguments should >> not appear in this patch), >> >> 3/3: use the new set_max_threads() implementation for >> threads-max with an update to the documentation. > > I disagree strongly: it's better to first do low-risk > cleanups, then do any fix and other changes. > > This approach has four advantages: > > - it makes the bug fix more apparent, in the context of > an already cleaned up code. > > - it strengthens the basic principle that 'substantial > work should be done on clean code'. > > - on the off chance that the bugfix introduces problems > _upstream_, it's much easier to revert in a late -rc > kernel, than to first revert the cleanups. This > happens in practice occasionally, so it's not a > theoretical concern. > > - the _backport_ to the -stable kernel will be more > robust as well, because under your proposed structure, > what gets tested upstream is the fix+cleanup, while the > backport will only be the fix, which does not get > tested by upstream in isolation. If there's any > (unintended) side effect of the cleanup that happens to > be an improvement, then we'll break -stable! > > It is true that this makes backports a tiny bit more > involved (2 cherry-picks instead of just one), but -stable > kernels can backport preparatory patches just fine, and > it's actually an advantage to have -stable kernel code > match the upstream version as much as possible. > > Thanks, > > Ingo > -- Hello David, to my understanding the biggest no-go for you was that patch 1/3 introduces a function argument that is not needed until patch 3/3. Could you accept the sequence proposed by Ingo if I leave away the argument max_threads_suggested in patch 1 and 2 and only introduce it in patch 3? So patch 1/4 will refactor the code that may result in division by zero to new function static void set_max_threads(void). Furthermore it will change the interface of fork_init to void __init fork_init(void). Patch 2/4 keeps the interface static void set_max_threads(void) but corrects the coding using div64_u64. Patch 3/4 changes the interface to static void set_max_threads(unsigned int max_threads_suggested), calls this function in fork_init with value UINT_MAX and calls it when threads-max is set with the user value. Patch 4/4 adds the necessary information about theads-max in Documentation/sysctl/kernel.txt. I would not like to put this in patch 3/4 as Jonathan Corbet uses a separate git tree. Best regards Heinrich -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/