Re: 2.6.9 page allocation failure. order:0, mode:0x20

From: Andrew Morton
Date: Thu Oct 28 2004 - 15:07:18 EST


Michael Clark <michael@xxxxxxxxxxxxxxxx> wrote:
>
> On 10/28/04 17:40, Andrew Morton wrote:
> > Michael Clark <michael@xxxxxxxxxxxxxxxx> wrote:
> >> cc1: page allocation failure. order:0, mode:0x20
> >> [<c013ba43>] __alloc_pages+0x1c3/0x390
> >> [<c013bc35>] __get_free_pages+0x25/0x40
> >> [<c013f283>] kmem_getpages+0x23/0xd0
> >> [<c013ffcf>] cache_grow+0xaf/0x160
> >> [<c0140202>] cache_alloc_refill+0x182/0x230
> >> [<c0140499>] kmem_cache_alloc+0x49/0x50
> >> [<c01c07df>] radix_tree_node_alloc+0x1f/0x70
> >> [<c01c0aad>] radix_tree_insert+0xed/0x110
> >> [<c014d841>] __add_to_swap_cache+0x71/0x100
> >> [<c014da5f>] add_to_swap+0x5f/0xc0
> >> [<c0142d32>] shrink_list+0x442/0x480
> >> [<c014bf7c>] page_referenced_anon+0x7c/0x90
> >> [<c01419c8>] __pagevec_release+0x28/0x40
> >
> >
> > I'm confused. 2.6.9 uses __GFP_NOWARN in add_to_swap() so the messages
> > should be suppressed. Are you sure you're using 2.6.9?
>
> Ya is 2.6.9, has uml-skas patch also but that doesn't touch swap_state.c
>
> Ah, I see I think, radix_tree_node_alloc first calls kmem_cache_alloc
> with root->gfp_mask and only if this fails dips into the preloaded
> percpu node stash.

Oh crap, so it does.

--- 25/mm/swap_state.c~swapper_space-warning-suppression 2004-10-28 12:51:06.975218208 -0700
+++ 25-akpm/mm/swap_state.c 2004-10-28 12:51:15.910859784 -0700
@@ -34,7 +34,7 @@ static struct backing_dev_info swap_back
};

struct address_space swapper_space = {
- .page_tree = RADIX_TREE_INIT(GFP_ATOMIC),
+ .page_tree = RADIX_TREE_INIT(GFP_ATOMIC|__GFP_NOWARN),
.tree_lock = SPIN_LOCK_UNLOCKED,
.a_ops = &swap_aops,
.i_mmap_nonlinear = LIST_HEAD_INIT(swapper_space.i_mmap_nonlinear),
_

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/