Allocate pages for symlink file from Normal zone, as the pages might be searched in radix-trees several times in one systemcall. However the migration code assumes every page is searched once. FIXME: This code is temporary, the base code assumes HighMem is hot-pluggable. The pages should be allocated from non hot-pluggable zone or non hot-pluggable memory area, not from Normal zone. Or make pages for symlink files hot-pluggable to remove this code. Signed-off-by: Hirokazu Takahashi Signed-off-by: Dave Hansen Index: linux-2.6.13/fs/namei.c =================================================================== --- linux-2.6.13.orig/fs/namei.c 2005-08-28 16:41:01.000000000 -0700 +++ linux-2.6.13/fs/namei.c 2005-08-30 12:17:40.000000000 -0700 @@ -2420,10 +2420,19 @@ void page_put_link(struct dentry *dentry int page_symlink(struct inode *inode, const char *symname, int len) { struct address_space *mapping = inode->i_mapping; - struct page *page = grab_cache_page(mapping, 0); + struct page *page; int err = -ENOMEM; char *kaddr; + /* XXXX: + * This is temporary code. This code should be replaced with proper one + * After the scheme to specify hot removable memory region has defined. + * Or remove this code if pages for symlink files become hot-pluggable. + * 5/Oct/2004 -- taka + */ + mapping_set_gfp_mask(mapping, mapping_gfp_mask(mapping) & ~__GFP_HIGHMEM); + + page = grab_cache_page(mapping, 0); if (!page) goto fail; err = mapping->a_ops->prepare_write(NULL, page, 0, len-1);