Simply call reclaim if we get to a point where we cannot perform the desired atomic allocation. If the reclaim is successful then restart the allocation. This will allow atomic allocs to not run out of memory. We reclaim clean pages instead. If we are in an interrupt then the interrupt holdoff will be long since reclaim processing is intensive. However, we will no longer OOM. Signed-off-by: Christoph Lameter --- mm/page_alloc.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) Index: linux-2.6/mm/page_alloc.c =================================================================== --- linux-2.6.orig/mm/page_alloc.c 2007-08-14 07:42:09.000000000 -0700 +++ linux-2.6/mm/page_alloc.c 2007-08-14 07:53:34.000000000 -0700 @@ -1326,8 +1326,12 @@ nofail_alloc: } /* Atomic allocations - we can't balance anything */ - if (!wait) + if (!wait) { + if (try_to_free_pages(zonelist->zones, order, gfp_mask + | __GFP_NOMEMALLOC)) + goto restart; goto nopage; + } cond_resched(); -- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org