Re: [PATCH 2/5] Swapless V2: Add migration swap entries

From: Christoph Lameter
Date: Thu Apr 13 2006 - 21:32:34 EST


On Thu, 13 Apr 2006, Andrew Morton wrote:

> So we falsely return VM_FAULT_MINOR and let userspace retake the pagefault,
> thus implementing a form of polling, yes? If so, there is no "something
> else" which this process can do.

Right.

> Pages are locked during migration. The faulting process will sleep in
> lock_page() until migration is complete. Except we've gone and diddled
> with the swap pte so do_swap_page() can no longer locate the page which
> needs to be locked.

Oh. The page is enconded in the migration pte.

> Doing a busy-wait seems a bit lame. Perhaps it would be better to go to
> sleep on some global queue, poke that queue each time a page migration
> completes?

If we rely on the migrating thread to hold the page count while the
page is locked then we could do what the patch below does. But then we
may race with the freeing of the old page after migration is finished.

If we would add the
increment of the page count back then we are on the safe side but have
the problem that we may increment the page count before the migrating
thread gets to the final check. Then the migration check would fail
and we would retry.


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;
}

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/