Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp4200016imm; Wed, 30 May 2018 00:43:13 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJrJzho8ZUJEIVza/JDDXuUHgEPdnBOPjjnVwgCyjyDSmV8HxDjnXpVJUIXwN33rScmwXHj X-Received: by 2002:a62:a09c:: with SMTP id p28-v6mr1741356pfl.9.1527666193615; Wed, 30 May 2018 00:43:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527666193; cv=none; d=google.com; s=arc-20160816; b=lDf49REB8P2vMpNEoVFgfiXeJvZSaln1WEWvNIFOoA0SQy6YnaEsOwsCY+DbZw+pM6 2oxR+OtUQrIYY2GxZCqx6Dp1dA+te7HR6MYXF45IVxWAfXWhT4UjlVgs21Kpc4bJkdWr zRyv3rTr7zHSF+JGUniA4BJW5/Lab8XleqJnVWjuGhaa8J1/+3VCzdRGwFtardi8Svmu oVGhFMZqZC8W0wyo2wqDjZ0dCTZGU6HPzJ0/UQ+Y0UzL+d+nXKp8ABb7DkJjwt5tMiOa hqZ6JgFayQ6ZZ9u4MmUsvxQPxf9SIP39ZR88HzllOJSoL2iwrtDVcoFSrzQR3BW1MgdY 7cRg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:arc-authentication-results; bh=Fc6A0ZD59lwRoYx4KO6NYSYqbXPM24SdoAucTNm2LGk=; b=GHw36b8Q9fmwUiaNPwQK5bZklToLoSvX8hbDG+vlXdQ97/oANyD3lR8iN2+QUU+YEs 0P7L5tiuHgdbZv0apx2OpT855NOqLPZgazA//JdoX6CryiL0069xcn8VKCiJ3uOvl5e2 KsD1X8ahCkHUOmSrp6/x4MBSBu8vvOAR0UN5A3fQI8CZnpSHJTJESfQ3KdZKXE3UvDNX 6YSD5LIQW9OTzsyh0tIQEyB5tyHBydpEKUH7CEnrBGxATlNYf4XCZ/Bel2fDvzZdyWpZ 8WBRHmKxCWWhsifbAd0lgZl6Z1GNam1QwPlFtXzseGZGvtlk1HYf3rwMU22zFG18K1uJ pK6g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q23-v6si34999284pfj.8.2018.05.30.00.42.59; Wed, 30 May 2018 00:43:13 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S936001AbeE3HmW (ORCPT + 99 others); Wed, 30 May 2018 03:42:22 -0400 Received: from mx2.suse.de ([195.135.220.15]:32810 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935134AbeE3HmU (ORCPT ); Wed, 30 May 2018 03:42:20 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (charybdis-ext-too.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 0B995ACA3; Wed, 30 May 2018 07:42:19 +0000 (UTC) Date: Wed, 30 May 2018 09:42:16 +0200 From: Michal Hocko To: Linus Torvalds Cc: Davidlohr Bueso , Andrew Morton , Thomas Graf , Herbert Xu , Manfred Spraul , guillaume.knispel@supersonicimagine.com, Linux API , Linux Kernel Mailing List , Davidlohr Bueso Subject: Re: [PATCH 3/6] lib/bucket_locks: use kvmalloc_array() Message-ID: <20180530074216.GZ27180@dhcp22.suse.cz> References: <20180524211135.27760-1-dave@stgolabs.net> <20180524211135.27760-4-dave@stgolabs.net> <20180529144317.GA20910@dhcp22.suse.cz> <20180529145106.GV27180@dhcp22.suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.9.5 (2018-04-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue 29-05-18 15:46:25, Linus Torvalds wrote: [...] > The whole and ONLY point of "kvmalloc()" and friends is to make it easy to > write code and _not_ have those idiotic "let's do kmalloc or kvmalloc > depending on the phase of the moon" garbage. So the warning has literally > destroyed the only value that function has! Well, I do agree but I've also seen terrible things while doing the conversion when introducing kvmalloc. So I admit that the defensive mode here is mostly inspired by existing users of vmalloc(GFP_NOFS). They are simply wrong and not really eager to be fixed from my experience. Now with kvmalloc fixing them up silently it would get even less likely to get fixed because there won't be any deadlock possible (compared to open coded kvmalloc like ext4_kvmalloc for example). My experience also tells me that most of those vmalloc NOFS users simply do not need NOFS at all because there is no risk of the reclaim recursion deadlocks. They are just used because of cargo cult which is sad and it causes some subtle problems for the direct reclaim. I would really like to eliminate those (e.g. see [1]). It is sad reality that people tend to be more sensitive to WARN splats than "look this is wrong albeit not critical in most cases). [1] http://lkml.kernel.org/r/20180424162712.GL17484@dhcp22.suse.cz That being sad, if you believe that silently fixing up a code like that is a good idea we can do the following of course: From c1a098e809a109800f9cfa63cb27fe9a78f3f316 Mon Sep 17 00:00:00 2001 From: Michal Hocko Date: Wed, 30 May 2018 09:34:39 +0200 Subject: [PATCH] mm: kvmalloc does not fallback to vmalloc for incompatible gfp flags kvmalloc warned about incompatible gfp_mask to catch abusers (mostly GFP_NOFS) with an intention that this will motivate authors of the code to fix those. Linus argues that this just motivates people to do even more hacks like if (gfp == GFP_KERNEL) kvmalloc else kmalloc I haven't seen this happening but it is true that we can grow those in future. Therefore Linus suggested to simply not fallback to vmalloc for incompatible gfp flags and rather stick with the kmalloc path. Requested-by: Linus Torvalds Signed-off-by: Michal Hocko --- mm/util.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mm/util.c b/mm/util.c index 45fc3169e7b0..c6586c146995 100644 --- a/mm/util.c +++ b/mm/util.c @@ -391,7 +391,8 @@ EXPORT_SYMBOL(vm_mmap); * __GFP_RETRY_MAYFAIL is supported, and it should be used only if kmalloc is * preferable to the vmalloc fallback, due to visible performance drawbacks. * - * Any use of gfp flags outside of GFP_KERNEL should be consulted with mm people. + * Please note that any use of gfp flags outside of GFP_KERNEL is careful to not + * fall back to vmalloc. */ void *kvmalloc_node(size_t size, gfp_t flags, int node) { @@ -402,7 +403,8 @@ void *kvmalloc_node(size_t size, gfp_t flags, int node) * vmalloc uses GFP_KERNEL for some internal allocations (e.g page tables) * so the given set of flags has to be compatible. */ - WARN_ON_ONCE((flags & GFP_KERNEL) != GFP_KERNEL); + if ((flags & GFP_KERNEL) != GFP_KERNEL) + return kmalloc_node(size, flags, node); /* * We want to attempt a large physically contiguous block first because -- 2.17.0 -- Michal Hocko SUSE Labs