From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756823AbcGIRWj (ORCPT ); Sat, 9 Jul 2016 13:22:39 -0400 Received: from out1134-194.mail.aliyun.com ([42.120.134.194]:50213 "EHLO out1134-194.mail.aliyun.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751897AbcGIRWh (ORCPT ); Sat, 9 Jul 2016 13:22:37 -0400 X-Greylist: delayed 303 seconds by postgrey-1.27 at vger.kernel.org; Sat, 09 Jul 2016 13:22:36 EDT X-Alimail-AntiSpam: AC=CONTINUE;BC=0.0748329|-1;FP=0|0|0|0|0|-1|-1|-1;HT=e02c03288;MF=chengang@emindsoft.com.cn;NM=1;PH=DS;RN=18;RT=17;SR=0;TI=SMTPD_----5.mxaZI_1468084631; From: chengang@emindsoft.com.cn To: akpm@linux-foundation.org, vbabka@suse.cz, mhocko@suse.com Cc: kirill.shutemov@linux.intel.com, mingo@kernel.org, dave.hansen@linux.intel.com, dan.j.williams@intel.com, hannes@cmpxchg.org, jack@suse.cz, iamjoonsoo.kim@lge.com, jmarchan@redhat.com, dingel@linux.vnet.ibm.com, oleg@redhat.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Chen Gang , Chen Gang Subject: [PATCH] mm: gup: Re-define follow_page_mask output parameter page_mask usage Date: Sun, 10 Jul 2016 01:17:05 +0800 Message-Id: <1468084625-26999-1-git-send-email-chengang@emindsoft.com.cn> X-Mailer: git-send-email 1.9.3 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Chen Gang For a pure output parameter: - When callee fails, the caller should not assume the output parameter is still valid. - And callee should not assume the pure output parameter must be provided by caller -- caller has right to pass NULL when caller does not care about it. Signed-off-by: Chen Gang --- include/linux/mm.h | 5 ++--- mm/gup.c | 6 +++--- mm/mlock.c | 2 +- mm/nommu.c | 1 - 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index b21e5f3..5c560fd 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -2205,10 +2205,9 @@ struct page *follow_page_mask(struct vm_area_struct *vma, unsigned int *page_mask); static inline struct page *follow_page(struct vm_area_struct *vma, - unsigned long address, unsigned int foll_flags) + unsigned long address, unsigned int foll_flags) { - unsigned int unused_page_mask; - return follow_page_mask(vma, address, foll_flags, &unused_page_mask); + return follow_page_mask(vma, address, foll_flags, NULL); } #define FOLL_WRITE 0x01 /* check pte is writable */ diff --git a/mm/gup.c b/mm/gup.c index 96b2b2f..9684b06 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -222,8 +222,6 @@ struct page *follow_page_mask(struct vm_area_struct *vma, struct page *page; struct mm_struct *mm = vma->vm_mm; - *page_mask = 0; - page = follow_huge_addr(mm, address, flags & FOLL_WRITE); if (!IS_ERR(page)) { BUG_ON(flags & FOLL_GET); @@ -298,7 +296,8 @@ struct page *follow_page_mask(struct vm_area_struct *vma, page = follow_trans_huge_pmd(vma, address, pmd, flags); spin_unlock(ptl); - *page_mask = HPAGE_PMD_NR - 1; + if (page_mask) + *page_mask = HPAGE_PMD_NR - 1; return page; } @@ -574,6 +573,7 @@ retry: if (unlikely(fatal_signal_pending(current))) return i ? i : -ERESTARTSYS; cond_resched(); + page_mask = 0; page = follow_page_mask(vma, start, foll_flags, &page_mask); if (!page) { int ret; diff --git a/mm/mlock.c b/mm/mlock.c index ef8dc9f..626eb58 100644 --- a/mm/mlock.c +++ b/mm/mlock.c @@ -438,7 +438,7 @@ void munlock_vma_pages_range(struct vm_area_struct *vma, while (start < end) { struct page *page; - unsigned int page_mask; + unsigned int page_mask = 0; unsigned long page_increm; struct pagevec pvec; struct zone *zone; diff --git a/mm/nommu.c b/mm/nommu.c index 95daf81..c1a0a89 100644 --- a/mm/nommu.c +++ b/mm/nommu.c @@ -1749,7 +1749,6 @@ struct page *follow_page_mask(struct vm_area_struct *vma, unsigned long address, unsigned int flags, unsigned int *page_mask) { - *page_mask = 0; return NULL; } -- 1.9.3