From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751667Ab0IJE0f (ORCPT ); Fri, 10 Sep 2010 00:26:35 -0400 Received: from TYO202.gate.nec.co.jp ([202.32.8.206]:47166 "EHLO tyo202.gate.nec.co.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751163Ab0IJE0d (ORCPT ); Fri, 10 Sep 2010 00:26:33 -0400 From: Naoya Horiguchi To: LKML Cc: Andrea Arcangeli , Hugh Dickins , Christoph Lameter , Linus Torvalds , Andrew Morton , Rik van Riel , Peter Zijlstra , Andi Kleen , linux-mm Subject: [PATCH 1/4] hugetlb, rmap: always use anon_vma root pointer Date: Fri, 10 Sep 2010 13:23:03 +0900 Message-Id: <1284092586-1179-2-git-send-email-n-horiguchi@ah.jp.nec.com> X-Mailer: git-send-email 1.7.2.2 In-Reply-To: <1284092586-1179-1-git-send-email-n-horiguchi@ah.jp.nec.com> References: <1284092586-1179-1-git-send-email-n-horiguchi@ah.jp.nec.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch applies Andrea's fix given by the following patch into hugepage rmapping code: commit 288468c334e98aacbb7e2fb8bde6bc1adcd55e05 Author: Andrea Arcangeli Date: Mon Aug 9 17:19:09 2010 -0700 This patch uses anon_vma->root and avoids unnecessary overwriting when anon_vma is already set up. Signed-off-by: Naoya Horiguchi --- mm/rmap.c | 13 +++++++------ 1 files changed, 7 insertions(+), 6 deletions(-) diff --git v2.6.36-rc3/mm/rmap.c v2.6.36-rc3/mm/rmap.c index f6f0d2d..2854857 100644 --- v2.6.36-rc3/mm/rmap.c +++ v2.6.36-rc3/mm/rmap.c @@ -1564,13 +1564,14 @@ static void __hugepage_set_anon_rmap(struct page *page, struct vm_area_struct *vma, unsigned long address, int exclusive) { struct anon_vma *anon_vma = vma->anon_vma; + BUG_ON(!anon_vma); - if (!exclusive) { - struct anon_vma_chain *avc; - avc = list_entry(vma->anon_vma_chain.prev, - struct anon_vma_chain, same_vma); - anon_vma = avc->anon_vma; - } + + if (PageAnon(page)) + return; + if (!exclusive) + anon_vma = anon_vma->root; + anon_vma = (void *) anon_vma + PAGE_MAPPING_ANON; page->mapping = (struct address_space *) anon_vma; page->index = linear_page_index(vma, address); -- 1.7.2.2