Messages in this thread | | | From | Nick Piggin <> | Subject | Re: [RFC] some page can't be migrated | Date | Fri, 25 Jan 2008 14:03:23 +1100 |
| |
On Wednesday 23 January 2008 17:22, Shaohua Li wrote: > Anonymous page might have fs-private metadata, the page is truncated. As > the page hasn't mapping, page migration refuse to migrate the page. It > appears the page is only freed in page reclaim and if zone watermark is > low, the page is never freed, as a result migration always fail. I > thought we could free the metadata so such page can be freed in > migration and make migration more reliable?
Anonymous pages should not have fs-private metadata.
Orphaned pages I guess you mean? They should not be accessable via the pagecache or the page tables, so how do they keep tangling up migration? Where/how is migration finding these pages?!
> > Thanks, > Shaohua > > diff --git a/mm/migrate.c b/mm/migrate.c > index 6a207e8..6bc38f7 100644 > --- a/mm/migrate.c > +++ b/mm/migrate.c > @@ -633,6 +633,17 @@ static int unmap_and_move(new_page_t get_new_page, > unsigned long private, goto unlock; > wait_on_page_writeback(page); > } > + > + /* > + * See truncate_complete_page(). Anonymous page might have > + * fs-private metadata, the page is truncated. Such page can't be > + * migrated. Try to free metadata, so the page can be freed. > + */ > + if (!page->mapping && !PageAnon(page) && PagePrivate(page)) { > + try_to_release_page(page, GFP_KERNEL); > + goto unlock; > + } > + > /* > * By try_to_unmap(), page->mapcount goes down to 0 here. In this case, > * we cannot notice that anon_vma is freed while we migrates a page. > > > --
| |