Re: [Lhms-devel] [PATCH 4/7] Direct Migration V5: migrate_pages() extension

Christoph Lameter
2005-11-30T16:42:14Z

On Wed, 30 Nov 2005, KAMEZAWA Hiroyuki wrote:

> I found a problem around the shmem,

The current page migration functions in mempolicy.c do not migrate shmem
vmas to be safe. In the future we surely would like to support migration
of shmem. I'd be glad if you could make sure that this works.

> Problem is:
> 1. a page of shmem(tmpfs)'s generic file is in page-cache. assume page is
> diry.
> 2. When it passed to migrate_page(), it reaches pageout() in the middle of
> migrate_page().
> 3. pageout calls shmem_writepage(), and the page turns to be swap-cache page.
> At this point, page->mapping becomes NULL (see move_to_swapcache())

A swapcache page would have page->mapping pointing to swapper space.
move_to_swap_cache does not set page->mapping == NULL.

> 7. Because spwapper_space's a_ops->migratepage is not NULL,
> "Avoid write back hook" in patch 7/7 is used.
> + if (mapping->a_ops->migratepage) {
> + rc = mapping->a_ops->migratepage(newpage, page);
> + goto unlock_both;
> + }
> a_ops->migrate_page points to migrate_page() in mm/vmscan.c
> 8. migrate_page() try to replace radix tree entry in swapper_space.
> 9. Becasue page->mapping is NULL(becasue of 3),
> migrate_page_remove_references() fails.

If page->mapping would be NULL then migrate_page() could not
have been called. The mapping is used to obtain the address of the
function to call,