

Hi,

Bugfix against P10-migrate-rollback.patch
The patch is against 2.6.10-rc1-mm2-mhp1 .

When unwinding has occurred, don't overwrite page->mapping with
newpage->mapping if it's in the swapcache. page->mapping should
keep the old value to be rolled back, or some problems may happen.

Signed-off-by: Hirokazu Takahashi <taka@valinux.co.jp>
Signed-off-by: Dave Hansen <haveblue@us.ibm.com>
---

 memhotplug-dave/mm/mmigrate.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff -puN mm/mmigrate.c~AA-PM-10.1-page-mapping_should_keep_the_old_value_to_be_rolled_back mm/mmigrate.c
--- memhotplug/mm/mmigrate.c~AA-PM-10.1-page-mapping_should_keep_the_old_value_to_be_rolled_back	2005-03-28 16:38:15.000000000 -0800
+++ memhotplug-dave/mm/mmigrate.c	2005-03-28 16:38:15.000000000 -0800
@@ -183,11 +183,11 @@ rewind_page(struct page *page, struct pa
 	 */
 	read_lock_irq(&mapping->tree_lock);
 	page->index = newpage->index;
-	page->mapping = newpage->mapping;
 	if (PageSwapCache(newpage)) {
 		SetPageSwapCache(page);
 		page->private = newpage->private;
-	}
+	} else
+		page->mapping = newpage->mapping;
 	if (radix_tree_replace(&mapping->page_tree, page_index(newpage), page) == NULL) {
 		printk(KERN_ERR "%s(): newpage:%p has gone. We can't roll back page:%p.\n", __FUNCTION__, newpage, page);
 		BUG();
_
