From: Michal Hocko <mhocko@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Davidlohr Bueso <dave@stgolabs.net>,
Andrew Morton <akpm@linux-foundation.org>,
Thomas Graf <tgraf@suug.ch>,
Herbert Xu <herbert@gondor.apana.org.au>,
Manfred Spraul <manfred@colorfullife.com>,
guillaume.knispel@supersonicimagine.com,
Linux API <linux-api@vger.kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Davidlohr Bueso <dbueso@suse.de>
Subject: Re: [PATCH 3/6] lib/bucket_locks: use kvmalloc_array()
Date: Wed, 30 May 2018 09:42:16 +0200 [thread overview]
Message-ID: <20180530074216.GZ27180@dhcp22.suse.cz> (raw)
In-Reply-To: <CA+55aFxoC0+hKBQ_TmbXM_X60fnP8JKC3aVvGc=8bKh2oxL12g@mail.gmail.com>
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 <mhocko@suse.com>
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 <torvalds@linux-foundation.org>
Signed-off-by: Michal Hocko <mhocko@suse.com>
---
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
next prev parent reply other threads:[~2018-05-30 7:42 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-24 21:11 [PATCH -next 0/6] rhashtable: guarantee first allocation Davidlohr Bueso
2018-05-24 21:11 ` [PATCH 1/6] lib/rhashtable: convert param sanitations to WARN_ON Davidlohr Bueso
2018-05-28 9:40 ` Herbert Xu
2018-05-28 13:12 ` Davidlohr Bueso
2018-05-28 15:54 ` Herbert Xu
2018-05-28 15:51 ` Davidlohr Bueso
2018-05-24 21:11 ` [PATCH 2/6] lib/rhashtable: guarantee initial hashtable allocation Davidlohr Bueso
2018-05-25 3:26 ` Davidlohr Bueso
2018-05-28 9:49 ` Herbert Xu
2018-05-29 17:03 ` Davidlohr Bueso
2018-05-29 18:04 ` Herbert Xu
2018-05-29 17:59 ` Davidlohr Bueso
2018-05-29 18:27 ` Herbert Xu
2018-05-30 14:29 ` Davidlohr Bueso
2018-05-28 10:02 ` Herbert Xu
2018-05-29 16:42 ` Davidlohr Bueso
2018-05-29 18:03 ` Herbert Xu
2018-05-29 17:55 ` Davidlohr Bueso
2018-05-29 18:15 ` Herbert Xu
2018-05-29 18:05 ` Davidlohr Bueso
2018-05-24 21:11 ` [PATCH 3/6] lib/bucket_locks: use kvmalloc_array() Davidlohr Bueso
2018-05-24 21:37 ` Linus Torvalds
2018-05-29 14:43 ` Michal Hocko
2018-05-29 14:51 ` Michal Hocko
2018-05-29 20:46 ` Linus Torvalds
2018-05-30 7:42 ` Michal Hocko [this message]
2018-05-31 15:01 ` Linus Torvalds
2018-05-31 15:29 ` Michal Hocko
2018-05-24 21:11 ` [PATCH 4/6] ipc: get rid of ids->tables_initialized hack Davidlohr Bueso
2018-05-24 21:11 ` [PATCH 5/6] ipc: simplify ipc initialization Davidlohr Bueso
2018-05-24 21:11 ` [PATCH 6/6] lib/test_rhashtable: rhashtable_init() can no longer fail Davidlohr Bueso
2018-05-24 21:41 ` [PATCH -next 0/6] rhashtable: guarantee first allocation Linus Torvalds
2018-05-25 3:34 ` Davidlohr Bueso
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180530074216.GZ27180@dhcp22.suse.cz \
--to=mhocko@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=dave@stgolabs.net \
--cc=dbueso@suse.de \
--cc=guillaume.knispel@supersonicimagine.com \
--cc=herbert@gondor.apana.org.au \
--cc=linux-api@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=manfred@colorfullife.com \
--cc=tgraf@suug.ch \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®