|
@@ -1085,11 +1085,17 @@ static struct page *allocate_slab(struct kmem_cache *s, gfp_t flags, int node)
|
|
{
|
|
{
|
|
struct page *page;
|
|
struct page *page;
|
|
struct kmem_cache_order_objects oo = s->oo;
|
|
struct kmem_cache_order_objects oo = s->oo;
|
|
|
|
+ gfp_t alloc_gfp;
|
|
|
|
|
|
flags |= s->allocflags;
|
|
flags |= s->allocflags;
|
|
|
|
|
|
- page = alloc_slab_page(flags | __GFP_NOWARN | __GFP_NORETRY, node,
|
|
|
|
- oo);
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Let the initial higher-order allocation fail under memory pressure
|
|
|
|
+ * so we fall-back to the minimum order allocation.
|
|
|
|
+ */
|
|
|
|
+ alloc_gfp = (flags | __GFP_NOWARN | __GFP_NORETRY) & ~__GFP_NOFAIL;
|
|
|
|
+
|
|
|
|
+ page = alloc_slab_page(alloc_gfp, node, oo);
|
|
if (unlikely(!page)) {
|
|
if (unlikely(!page)) {
|
|
oo = s->min;
|
|
oo = s->min;
|
|
/*
|
|
/*
|