Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1761920AbZDGWqV (ORCPT ); Tue, 7 Apr 2009 18:46:21 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1758939AbZDGWqF (ORCPT ); Tue, 7 Apr 2009 18:46:05 -0400 Received: from mga03.intel.com ([143.182.124.21]:15502 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758859AbZDGWqD (ORCPT ); Tue, 7 Apr 2009 18:46:03 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.39,339,1235980800"; d="scan'208";a="128994528" Date: Wed, 8 Apr 2009 06:45:45 +0800 From: Wu Fengguang To: Ying Han Cc: Andrew Morton , LKML , "linux-fsdevel@vger.kernel.org" , "linux-mm@kvack.org" Subject: Re: [PATCH 02/14] mm: fix major/minor fault accounting on retried fault Message-ID: <20090407224545.GA5607@localhost> References: <20090407071729.233579162@intel.com> <20090407072132.943283183@intel.com> <604427e00904071258y78eea757m6d95d08deec49450@mail.gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <604427e00904071258y78eea757m6d95d08deec49450@mail.gmail.com> User-Agent: Mutt/1.5.18 (2008-05-17) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2882 Lines: 86 On Wed, Apr 08, 2009 at 03:58:16AM +0800, Ying Han wrote: > On Tue, Apr 7, 2009 at 12:17 AM, Wu Fengguang wrote: > > VM_FAULT_RETRY does make major/minor faults accounting a bit twisted.. > > > > Cc: Ying Han > > Signed-off-by: Wu Fengguang > > --- > > arch/x86/mm/fault.c | 2 ++ > > mm/memory.c | 22 ++++++++++++++-------- > > 2 files changed, 16 insertions(+), 8 deletions(-) > > > > --- mm.orig/arch/x86/mm/fault.c > > +++ mm/arch/x86/mm/fault.c > > @@ -1160,6 +1160,8 @@ good_area: > > if (fault & VM_FAULT_RETRY) { > > if (retry_flag) { > > retry_flag = 0; > > + tsk->maj_flt++; > > + tsk->min_flt--; > > goto retry; > > } > > BUG(); > sorry, little bit confuse here. are we assuming the retry path will > return min_flt as always? Sure - except for some really exceptional ftruncate cases. The page was there ready, and we'll retry immediately. maj_flt/min_flt are not _exact_ numbers by their nature, so 99.9% accuracy shall be fine. Thanks, Fengguang > > --- mm.orig/mm/memory.c > > +++ mm/mm/memory.c > > @@ -2882,26 +2882,32 @@ int handle_mm_fault(struct mm_struct *mm > > pud_t *pud; > > pmd_t *pmd; > > pte_t *pte; > > + int ret; > > > > __set_current_state(TASK_RUNNING); > > > > - count_vm_event(PGFAULT); > > - > > - if (unlikely(is_vm_hugetlb_page(vma))) > > - return hugetlb_fault(mm, vma, address, write_access); > > + if (unlikely(is_vm_hugetlb_page(vma))) { > > + ret = hugetlb_fault(mm, vma, address, write_access); > > + goto out; > > + } > > > > + ret = VM_FAULT_OOM; > > pgd = pgd_offset(mm, address); > > pud = pud_alloc(mm, pgd, address); > > if (!pud) > > - return VM_FAULT_OOM; > > + goto out; > > pmd = pmd_alloc(mm, pud, address); > > if (!pmd) > > - return VM_FAULT_OOM; > > + goto out; > > pte = pte_alloc_map(mm, pmd, address); > > if (!pte) > > - return VM_FAULT_OOM; > > + goto out; > > > > - return handle_pte_fault(mm, vma, address, pte, pmd, write_access); > > + ret = handle_pte_fault(mm, vma, address, pte, pmd, write_access); > > +out: > > + if (!(ret & VM_FAULT_RETRY)) > > + count_vm_event(PGFAULT); > > + return ret; > > } > > > > #ifndef __PAGETABLE_PUD_FOLDED > > > > -- > > > > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/