From c745e69eefc63f75aa2b1c5db2bb1556aadf9315 Mon Sep 17 00:00:00 2001 From: Nick Piggin Date: Tue, 6 Jan 2009 14:40:28 -0800 Subject: [PATCH] --- yaml --- r: 126255 b: refs/heads/master c: 67d58ac47d25f7e2a105248a4aea6113131ab874 h: refs/heads/master i: 126253: cd4a4df1a8d922dd5b3bbb3f0de74d5860b7aa82 126251: b55b87b4f866b4b7e5abfbe763a371da24179cac 126247: bb31aabdc6b9e2a7b2a2e3d4278321ac33ab7b20 126239: f5701419eeb7f9f459079f5448e8c3bb79d19ad1 v: v3 --- [refs] | 2 +- trunk/mm/filemap.c | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index a6ed4d97cdbb..0a136da5e48f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 856bf4d717feb8c55d4e2f817b71ebb70cfbc67b +refs/heads/master: 67d58ac47d25f7e2a105248a4aea6113131ab874 diff --git a/trunk/mm/filemap.c b/trunk/mm/filemap.c index f3555fb806d3..2f55a1e2baf7 100644 --- a/trunk/mm/filemap.c +++ b/trunk/mm/filemap.c @@ -741,7 +741,14 @@ struct page *find_or_create_page(struct address_space *mapping, page = __page_cache_alloc(gfp_mask); if (!page) return NULL; - err = add_to_page_cache_lru(page, mapping, index, gfp_mask); + /* + * We want a regular kernel memory (not highmem or DMA etc) + * allocation for the radix tree nodes, but we need to honour + * the context-specific requirements the caller has asked for. + * GFP_RECLAIM_MASK collects those requirements. + */ + err = add_to_page_cache_lru(page, mapping, index, + (gfp_mask & GFP_RECLAIM_MASK)); if (unlikely(err)) { page_cache_release(page); page = NULL; @@ -950,7 +957,7 @@ grab_cache_page_nowait(struct address_space *mapping, pgoff_t index) return NULL; } page = __page_cache_alloc(mapping_gfp_mask(mapping) & ~__GFP_FS); - if (page && add_to_page_cache_lru(page, mapping, index, GFP_KERNEL)) { + if (page && add_to_page_cache_lru(page, mapping, index, GFP_NOFS)) { page_cache_release(page); page = NULL; }