From mboxrd@z Thu Jan 1 00:00:00 1970 Date: Thu, 20 Apr 2006 09:22:12 -0700 (PDT) From: Christoph Lameter Subject: Re: [PATCH 2.6.17-rc1-mm3] add migratepage address space op to shmem In-Reply-To: <1145548859.5214.9.camel@localhost.localdomain> Message-ID: References: <1145548859.5214.9.camel@localhost.localdomain> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-linux-mm@kvack.org Return-Path: To: Andrew Morton Cc: linux-mm , Lee Schermerhorn List-ID: On Thu, 20 Apr 2006, Lee Schermerhorn wrote: > Add migratepage address space op to shmem > > Basic problem: pages of a shared memory segment can only be > migrated once. > > In 2.6.16 through 2.6.17-rc1, shared memory mappings do not > have a migratepage address space op. Therefore, migrate_pages() > falls back to default processing. In this path, it will try to > pageout() dirty pages. Once a shared memory page has been migrated > it becomes dirty, so migrate_pages() will try to page it out. > However, because the page count is 3 [cache + current + pte], > pageout() will return PAGE_KEEP because is_page_cache_freeable() > returns false. This will abort all subsequent migrations. > > This patch adds a migratepage address space op to shared memory > segments to avoid taking the default path. We use the "migrate_page()" > function because it knows how to migrate dirty pages. This allows > shared memory segment pages to migrate, subject to other conditions > such as # pte's referencing the page [page_mapcount(page)], when > requested. > > I think this is safe. If we're migrating a shared memory page, > then we found the page via a page table, so it must be in > memory. > > Can be verified with memtoy and the shmem-mbind-test script, both > available at: http://free.linux.hp.com/~lts/Tools/ > > Signed-off-by: Lee Schermerhorn > > Index: linux-2.6.17-rc1-mm3/mm/shmem.c > =================================================================== > --- linux-2.6.17-rc1-mm3.orig/mm/shmem.c 2006-04-19 17:29:09.000000000 -0400 > +++ linux-2.6.17-rc1-mm3/mm/shmem.c 2006-04-19 17:29:36.000000000 -0400 > @@ -46,6 +46,8 @@ > #include > #include > #include > +#include > + > #include > #include > #include > @@ -2165,6 +2167,7 @@ static struct address_space_operations s > .prepare_write = shmem_prepare_write, > .commit_write = simple_commit_write, > #endif > + .migratepage = migrate_page, > }; > > static struct file_operations shmem_file_operations = { > > > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org