Ning Qu wrote: > For replacing a page inside page cache, we assume the huge page > has been splitted before getting here. > > For adding a new page to page cache, huge page support has been added. > > Also refactor the shm_add_to_page_cache function. > > Signed-off-by: Ning Qu <quning@xxxxxxxxx> > --- > mm/shmem.c | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++------ > 1 file changed, 88 insertions(+), 9 deletions(-) > > diff --git a/mm/shmem.c b/mm/shmem.c > index a857ba8..447bd14 100644 > --- a/mm/shmem.c > +++ b/mm/shmem.c > @@ -277,27 +277,23 @@ static bool shmem_confirm_swap(struct address_space *mapping, > } > > /* > - * Like add_to_page_cache_locked, but error if expected item has gone. > + * Replace the swap entry with page cache entry > */ > -static int shmem_add_to_page_cache(struct page *page, > +static int shmem_replace_page_page_cache(struct page *page, > struct address_space *mapping, > pgoff_t index, gfp_t gfp, void *expected) > { > int error; > > - VM_BUG_ON(!PageLocked(page)); > - VM_BUG_ON(!PageSwapBacked(page)); > + BUG_ON(PageTransHugeCache(page)); > > page_cache_get(page); > page->mapping = mapping; > page->index = index; > > spin_lock_irq(&mapping->tree_lock); > - if (!expected) > - error = radix_tree_insert(&mapping->page_tree, index, page); > - else > - error = shmem_radix_tree_replace(mapping, index, expected, > - page); > + > + error = shmem_radix_tree_replace(mapping, index, expected, page); > if (!error) { > mapping->nrpages++; > __inc_zone_page_state(page, NR_FILE_PAGES); > @@ -312,6 +308,87 @@ static int shmem_add_to_page_cache(struct page *page, > } > > /* > + * Insert new page into with page cache > + */ > +static int shmem_insert_page_page_cache(struct page *page, > + struct address_space *mapping, > + pgoff_t index, gfp_t gfp) > +{ You copy-paste most of add_to_page_cache_locked() code here. Is there a way to share the code? Move common part into __add_to_page_cache_locked() or something. -- Kirill A. Shutemov -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>