diff mbox series

[PATCHv6,1/3] mm/gup: rename nr as nr_pinned in get_user_pages_fast()

Message ID 1584333244-10480-2-git-send-email-kernelfans@gmail.com (mailing list archive)
State New, archived
Headers show
Series fix omission of check on FOLL_LONGTERM in gup fast path | expand

Commit Message

Pingfan Liu March 16, 2020, 4:34 a.m. UTC
To better reflect the held state of pages and make code self-explaining,
rename nr as nr_pinned.

Signed-off-by: Pingfan Liu <kernelfans@gmail.com>
Cc: Ira Weiny <ira.weiny@intel.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Mike Rapoport <rppt@linux.ibm.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: John Hubbard <jhubbard@nvidia.com>
Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Shuah Khan <shuah@kernel.org>
To: linux-mm@kvack.org
Cc: linux-kernel@vger.kernel.org
---
 mm/gup.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

--
2.7.5

Comments

Christoph Hellwig March 16, 2020, 8:54 a.m. UTC | #1
On Mon, Mar 16, 2020 at 12:34:02PM +0800, Pingfan Liu wrote:
> To better reflect the held state of pages and make code self-explaining,
> rename nr as nr_pinned.

Looks good,

Reviewed-by: Christoph Hellwig <hch@lst.de>
John Hubbard March 19, 2020, 9:51 p.m. UTC | #2
On 3/15/20 9:34 PM, Pingfan Liu wrote:
> To better reflect the held state of pages and make code
> self-explaining, rename nr as nr_pinned.
> 
> Signed-off-by: Pingfan Liu <kernelfans@gmail.com> Cc: Ira Weiny
> <ira.weiny@intel.com> Cc: Andrew Morton <akpm@linux-foundation.org> 
> Cc: Mike Rapoport <rppt@linux.ibm.com> Cc: Dan Williams
> <dan.j.williams@intel.com> Cc: Matthew Wilcox <willy@infradead.org> 
> Cc: John Hubbard <jhubbard@nvidia.com> Cc: "Aneesh Kumar K.V"
> <aneesh.kumar@linux.ibm.com> Cc: Christoph Hellwig
> <hch@infradead.org> Cc: Shuah Khan <shuah@kernel.org> To:
> linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org --- mm/gup.c | 20
> ++++++++++---------- 1 file changed, 10 insertions(+), 10
> deletions(-)
> 

Hi Pingfan,

This is correct as far as it goes, but it doesn't go quite far enough. This should
at least should cover the other caller of gup_pgd_range().

Background: There are two internal-to-gup.c entry points to gup fast:
internal_get_user_pages_fast(), and __get_user_pages_fast(). Quite commonly when
submitting fixes to one of these functions, the other is overlooked, as happened
here.

Here's a diff on top of your patch, that I think should be squashed into your patch:

diff --git a/mm/gup.c b/mm/gup.c
index d0c0d084e792..56052b73abc3 100644
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -2676,7 +2676,7 @@ int __get_user_pages_fast(unsigned long start, int nr_pages, int write,
  {
  	unsigned long len, end;
  	unsigned long flags;
-	int nr = 0;
+	int nr_pinned = 0;
  	/*
  	 * Internally (within mm/gup.c), gup fast variants must set FOLL_GET,
  	 * because gup fast is always a "pin with a +1 page refcount" request.
@@ -2710,11 +2710,11 @@ int __get_user_pages_fast(unsigned long start, int nr_pages, int write,
  	if (IS_ENABLED(CONFIG_HAVE_FAST_GUP) &&
  	    gup_fast_permitted(start, end)) {
  		local_irq_save(flags);
-		gup_pgd_range(start, end, gup_flags, pages, &nr);
+		gup_pgd_range(start, end, gup_flags, pages, &nr_pinned);
  		local_irq_restore(flags);
  	}
  
-	return nr;
+	return nr_pinned;
  }
  EXPORT_SYMBOL_GPL(__get_user_pages_fast);
  

With that applied, you can add:

     Reviewed-by: John Hubbard <jhubbard@nvidia.com>


thanks,
diff mbox series

Patch

diff --git a/mm/gup.c b/mm/gup.c
index e8aaa40..9df77b1 100644
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -2735,7 +2735,7 @@  static int internal_get_user_pages_fast(unsigned long start, int nr_pages,
 					struct page **pages)
 {
 	unsigned long addr, len, end;
-	int nr = 0, ret = 0;
+	int nr_pinned = 0, ret = 0;

 	if (WARN_ON_ONCE(gup_flags & ~(FOLL_WRITE | FOLL_LONGTERM |
 				       FOLL_FORCE | FOLL_PIN | FOLL_GET)))
@@ -2754,25 +2754,25 @@  static int internal_get_user_pages_fast(unsigned long start, int nr_pages,
 	if (IS_ENABLED(CONFIG_HAVE_FAST_GUP) &&
 	    gup_fast_permitted(start, end)) {
 		local_irq_disable();
-		gup_pgd_range(addr, end, gup_flags, pages, &nr);
+		gup_pgd_range(addr, end, gup_flags, pages, &nr_pinned);
 		local_irq_enable();
-		ret = nr;
+		ret = nr_pinned;
 	}

-	if (nr < nr_pages) {
+	if (nr_pinned < nr_pages) {
 		/* Try to get the remaining pages with get_user_pages */
-		start += nr << PAGE_SHIFT;
-		pages += nr;
+		start += nr_pinned << PAGE_SHIFT;
+		pages += nr_pinned;

-		ret = __gup_longterm_unlocked(start, nr_pages - nr,
+		ret = __gup_longterm_unlocked(start, nr_pages - nr_pinned,
 					      gup_flags, pages);

 		/* Have to be a bit careful with return values */
-		if (nr > 0) {
+		if (nr_pinned > 0) {
 			if (ret < 0)
-				ret = nr;
+				ret = nr_pinned;
 			else
-				ret += nr;
+				ret += nr_pinned;
 		}
 	}