Index: linux-2.6.5-SLES9_SP1_BRANCH_2004111114454891/mm/filemap.c =================================================================== --- linux-2.6.5-SLES9_SP1_BRANCH_2004111114454891.orig/mm/filemap.c 2004-11-11 10:28:45.000000000 -0500 +++ linux-2.6.5-SLES9_SP1_BRANCH_2004111114454891/mm/filemap.c 2005-02-01 01:36:08.000000000 -0500 @@ -773,8 +773,19 @@ struct page * grab_cache_page_nowait(struct address_space *mapping, unsigned long index) { + return grab_cache_page_nowait_gfp(mapping, index, + mapping_gfp_mask(mapping) & + ~__GFP_FS); +} + +EXPORT_SYMBOL(grab_cache_page_nowait); + +struct page * +grab_cache_page_nowait_gfp(struct address_space *mapping, + unsigned long index, + unsigned int gfp_mask) +{ struct page *page = find_get_page(mapping, index); - int gfp_mask; if (page) { if (!TestSetPageLocked(page)) @@ -782,7 +793,7 @@ page_cache_release(page); return NULL; } - gfp_mask = mapping_gfp_mask(mapping) & ~__GFP_FS; + page = alloc_pages(gfp_mask, 0); if (page && add_to_page_cache_lru(page, mapping, index, gfp_mask)) { page_cache_release(page); @@ -791,7 +802,7 @@ return page; } -EXPORT_SYMBOL(grab_cache_page_nowait); +EXPORT_SYMBOL(grab_cache_page_nowait_gfp); /* * This is a generic file read routine, and uses the Index: linux-2.6.5-SLES9_SP1_BRANCH_2004111114454891/include/linux/pagemap.h =================================================================== --- linux-2.6.5-SLES9_SP1_BRANCH_2004111114454891.orig/include/linux/pagemap.h 2004-11-11 10:28:43.000000000 -0500 +++ linux-2.6.5-SLES9_SP1_BRANCH_2004111114454891/include/linux/pagemap.h 2005-02-01 01:29:06.000000000 -0500 @@ -92,6 +92,9 @@ extern struct page * grab_cache_page_nowait(struct address_space *mapping, unsigned long index); +extern struct page * grab_cache_page_nowait_gfp(struct address_space *mapping, + unsigned long index, + unsigned int gfp_mask); extern struct page * read_cache_page(struct address_space *mapping, unsigned long index, filler_t *filler, void *data);