From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758590Ab3JOKCV (ORCPT ); Tue, 15 Oct 2013 06:02:21 -0400 Received: from mga02.intel.com ([134.134.136.20]:34056 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758553Ab3JOKCT (ORCPT ); Tue, 15 Oct 2013 06:02:19 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.93,498,1378882800"; d="scan'208";a="419319946" From: "Kirill A. Shutemov" To: Ning Qu Cc: Andrea Arcangeli , Andrew Morton , "Kirill A. Shutemov" , Hugh Dickins , Al Viro , Hugh Dickins , Wu Fengguang , Jan Kara , Mel Gorman , linux-mm@kvack.org, Andi Kleen , Matthew Wilcox , Hillf Danton , Dave Hansen , Alexander Shishkin , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Ning Qu In-Reply-To: <20131015001201.GC3432@hippobay.mtv.corp.google.com> References: <20131015001201.GC3432@hippobay.mtv.corp.google.com> Subject: RE: [PATCH 02/12] mm, thp, tmpfs: support to add huge page into page cache for tmpfs Content-Transfer-Encoding: 7bit Message-Id: <20131015100213.A0189E0090@blue.fi.intel.com> Date: Tue, 15 Oct 2013 13:02:13 +0300 (EEST) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 > --- > 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