

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 <taka@valinux.co.jp>
Signed-off-by: Dave Hansen <haveblue@us.ibm.com>
---

 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-28 16:38:34.000000000 -0800
+++ memhotplug-dave/fs/namei.c	2005-03-28 16:38:34.000000000 -0800
@@ -2377,10 +2377,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);
_
