Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755186AbbHXSd6 (ORCPT ); Mon, 24 Aug 2015 14:33:58 -0400 Received: from mx1.redhat.com ([209.132.183.28]:58512 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751235AbbHXSd5 (ORCPT ); Mon, 24 Aug 2015 14:33:57 -0400 Date: Mon, 24 Aug 2015 20:31:26 +0200 From: Oleg Nesterov To: "Paul E. McKenney" , Rusty Russell Cc: Ingo Molnar , Linus Torvalds , Peter Zijlstra , Tejun Heo , linux-kernel@vger.kernel.org Subject: parse_args() is too unforgivable? Message-ID: <20150824183126.GA8388@redhat.com> References: <20150821174230.GA17867@redhat.com> <20150822163810.GV11078@linux.vnet.ibm.com> <20150824153431.GB24949@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150824153431.GB24949@redhat.com> User-Agent: Mutt/1.5.18 (2008-05-17) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1703 Lines: 58 On 08/24, Oleg Nesterov wrote: > > I booted the kernel with the additional patch below, and nothing bad has > happened, Until I tried reboot it once with "locktorture.verbose=true" paramater. It didn't boot. This is because parse_args() just aborts after it hits the error, so other arguments at the same initcall level are simply ignored. Fixed by the patch below, but I simply can't believe nobody hit this (imo) bug before. Why does parse_args() do this?? I simply can't understand why parse_args() adds more random and hard-to-understand problems if one of the args ("=true" in this particular case) is wrong. Yes, the patch below is probably oversimplified / incomplete but imho the current behaviour is confusing. At least I was greatly confused ;) At least (I think) it makes sense to let the user know that the rest of command line was probably ignored. Oleg. --- --- a/kernel/params.c +++ b/kernel/params.c @@ -220,19 +220,19 @@ char *parse_args(const char *doing, doing, param); switch (ret) { + case 0: + break; case -ENOENT: pr_err("%s: Unknown parameter `%s'\n", doing, param); - return ERR_PTR(ret); + break; case -ENOSPC: pr_err("%s: `%s' too large for parameter `%s'\n", doing, val ?: "", param); - return ERR_PTR(ret); - case 0: break; default: pr_err("%s: `%s' invalid for parameter `%s'\n", doing, val ?: "", param); - return ERR_PTR(ret); + break; } } -- 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/