Index: linux-2.6.17-rc1-mm2/mm/memory.c =================================================================== --- linux-2.6.17-rc1-mm2.orig/mm/memory.c 2006-04-13 17:32:36.000000000 -0700 +++ linux-2.6.17-rc1-mm2/mm/memory.c 2006-04-13 18:26:49.000000000 -0700 @@ -1881,11 +1881,11 @@ static int do_swap_page(struct mm_struct entry = pte_to_swp_entry(orig_pte); if (is_migration_entry(entry)) { - /* - * We cannot access the page because of ongoing page - * migration. See if we can do something else. - */ - yield(); + page = migration_entry_to_page(entry); + lock_page(page); + entry = pte_to_swp_entry(*page_table); + BUG_ON(!is_migration_entry(entry)); + unlock_page(page); goto out; }