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 --- memhotplug-dave/fs/namei.c | 11 ++++++++++- 1 files changed, 10 insertions(+), 1 deletion(-) diff -puN fs/namei.c~AA-PM-27-symlink fs/namei.c --- memhotplug/fs/namei.c~AA-PM-27-symlink 2005-03-11 10:52:11.000000000 -0800 +++ memhotplug-dave/fs/namei.c 2005-03-11 10:52:11.000000000 -0800 @@ -2368,10 +2368,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); _