mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 12:11:40 +00:00
slub: fix high order page allocation problem with __GFP_NOFAIL
SLUB already try to allocate high order page with clearing __GFP_NOFAIL. But, when allocating shadow page for kmemcheck, it missed clearing the flag. This trigger WARN_ON_ONCE() reported by Christian Casteyde. https://bugzilla.kernel.org/show_bug.cgi?id=65991 https://lkml.org/lkml/2013/12/3/764 This patch fix this situation by using same allocation flag as original allocation. Reported-by: Christian Casteyde <casteyde.christian@free.fr> Acked-by: David Rientjes <rientjes@google.com> Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com> Signed-off-by: Pekka Enberg <penberg@kernel.org>
This commit is contained in:
parent
5087c82299
commit
80c3a9981a
@ -1350,11 +1350,12 @@ static struct page *allocate_slab(struct kmem_cache *s, gfp_t flags, int node)
|
||||
page = alloc_slab_page(alloc_gfp, node, oo);
|
||||
if (unlikely(!page)) {
|
||||
oo = s->min;
|
||||
alloc_gfp = flags;
|
||||
/*
|
||||
* Allocation may have failed due to fragmentation.
|
||||
* Try a lower order alloc if possible
|
||||
*/
|
||||
page = alloc_slab_page(flags, node, oo);
|
||||
page = alloc_slab_page(alloc_gfp, node, oo);
|
||||
|
||||
if (page)
|
||||
stat(s, ORDER_FALLBACK);
|
||||
@ -1364,7 +1365,7 @@ static struct page *allocate_slab(struct kmem_cache *s, gfp_t flags, int node)
|
||||
&& !(s->flags & (SLAB_NOTRACK | DEBUG_DEFAULT_FLAGS))) {
|
||||
int pages = 1 << oo_order(oo);
|
||||
|
||||
kmemcheck_alloc_shadow(page, oo_order(oo), flags, node);
|
||||
kmemcheck_alloc_shadow(page, oo_order(oo), alloc_gfp, node);
|
||||
|
||||
/*
|
||||
* Objects from caches that have a constructor don't get
|
||||
|
Loading…
Reference in New Issue
Block a user