summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMichal Hocko <mhocko@suse.com>2018-06-07 17:09:40 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2018-06-07 17:34:38 -0700
commitce91f6ee5b3bbbad8caff61b1c46d845c8db19bf (patch)
tree6b15942c9c8f673dc94a9dbc824e778f2ef8ff2a /lib
parent4b33b6959581d5093af2badb489d914911d99eaf (diff)
downloadlinux-stable-ce91f6ee5b3bbbad8caff61b1c46d845c8db19bf.tar.gz
linux-stable-ce91f6ee5b3bbbad8caff61b1c46d845c8db19bf.tar.bz2
linux-stable-ce91f6ee5b3bbbad8caff61b1c46d845c8db19bf.zip
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 much (Linus pointed to bucket_lock special cases an atomic allocation but my git foo hasn't found much more) 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. Link: http://lkml.kernel.org/r/20180601115329.27807-1-mhocko@kernel.org Signed-off-by: Michal Hocko <mhocko@suse.com> Suggested-by: Linus Torvalds <torvalds@linux-foundation.org> Cc: Tom Herbert <tom@quantonium.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/bucket_locks.c5
1 files changed, 1 insertions, 4 deletions
diff --git a/lib/bucket_locks.c b/lib/bucket_locks.c
index 266a97c5708b..ade3ce6c4af6 100644
--- a/lib/bucket_locks.c
+++ b/lib/bucket_locks.c
@@ -30,10 +30,7 @@ int alloc_bucket_spinlocks(spinlock_t **locks, unsigned int *locks_mask,
}
if (sizeof(spinlock_t) != 0) {
- if (gfpflags_allow_blocking(gfp))
- tlocks = kvmalloc(size * sizeof(spinlock_t), gfp);
- else
- tlocks = kmalloc_array(size, sizeof(spinlock_t), gfp);
+ tlocks = kvmalloc_array(size, sizeof(spinlock_t), gfp);
if (!tlocks)
return -ENOMEM;
for (i = 0; i < size; i++)