From: Dave Hansen <[email protected]>

Now that we have one fewer callers of __get_user_pages(), we only
have one way in which it is called.  Neither of the two remaining
callers need to pass 'locked' nor set notify_drop=1.  We can drop
both those arguments.

Signed-off-by: Dave Hansen <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Kirill A. Shutemov <[email protected]>
Cc: Andrea Arcangeli <[email protected]>
Cc: Naoya Horiguchi <[email protected]>
---

 b/mm/gup.c |   39 ++++++++-------------------------------
 1 file changed, 8 insertions(+), 31 deletions(-)

diff -puN mm/gup.c~simplify-get_user_pages mm/gup.c
--- a/mm/gup.c~simplify-get_user_pages  2015-11-16 12:35:36.119207285 -0800
+++ b/mm/gup.c  2015-11-16 12:35:36.123207466 -0800
@@ -625,18 +625,10 @@ static __always_inline long __get_user_p
                                                int write, int force,
                                                struct page **pages,
                                                struct vm_area_struct **vmas,
-                                               int *locked, bool notify_drop,
                                                unsigned int flags)
 {
+       int locked = 1;
        long ret, pages_done;
-       bool lock_dropped;
-
-       if (locked) {
-               /* if VM_FAULT_RETRY can be returned, vmas become invalid */
-               BUG_ON(vmas);
-               /* check caller initialized locked */
-               BUG_ON(*locked != 1);
-       }
 
        if (pages)
                flags |= FOLL_GET;
@@ -646,16 +638,12 @@ static __always_inline long __get_user_p
                flags |= FOLL_FORCE;
 
        pages_done = 0;
-       lock_dropped = false;
        for (;;) {
                ret = __get_user_pages(tsk, mm, start, nr_pages, flags, pages,
-                                      vmas, locked);
-               if (!locked)
-                       /* VM_FAULT_RETRY couldn't trigger, bypass */
-                       return ret;
+                                      vmas, &locked);
 
                /* VM_FAULT_RETRY cannot return errors */
-               if (!*locked) {
+               if (!locked) {
                        BUG_ON(ret < 0);
                        BUG_ON(ret >= nr_pages);
                }
@@ -670,7 +658,7 @@ static __always_inline long __get_user_p
                        if (!nr_pages)
                                break;
                }
-               if (*locked) {
+               if (locked) {
                        /* VM_FAULT_RETRY didn't trigger */
                        if (!pages_done)
                                pages_done = ret;
@@ -685,8 +673,7 @@ static __always_inline long __get_user_p
                 * without FAULT_FLAG_ALLOW_RETRY but with
                 * FAULT_FLAG_TRIED.
                 */
-               *locked = 1;
-               lock_dropped = true;
+               locked = 1;
                down_read(&mm->mmap_sem);
                ret = __get_user_pages(tsk, mm, start, 1, flags | FOLL_TRIED,
                                       pages, NULL, NULL);
@@ -703,14 +690,6 @@ static __always_inline long __get_user_p
                pages++;
                start += PAGE_SIZE;
        }
-       if (notify_drop && lock_dropped && *locked) {
-               /*
-                * We must let the caller know we temporarily dropped the lock
-                * and so the critical section protected by it was lost.
-                */
-               up_read(&mm->mmap_sem);
-               *locked = 0;
-       }
        return pages_done;
 }
 
@@ -730,12 +709,10 @@ __always_inline long __get_user_pages_un
                                               unsigned int gup_flags)
 {
        long ret;
-       int locked = 1;
        down_read(&mm->mmap_sem);
        ret = __get_user_pages_locked(tsk, mm, start, nr_pages, write, force,
-                                     pages, NULL, &locked, false, gup_flags);
-       if (locked)
-               up_read(&mm->mmap_sem);
+                                     pages, NULL, gup_flags);
+       up_read(&mm->mmap_sem);
        return ret;
 }
 EXPORT_SYMBOL(__get_user_pages_unlocked);
@@ -826,7 +803,7 @@ long get_user_pages(struct task_struct *
                int force, struct page **pages, struct vm_area_struct **vmas)
 {
        return __get_user_pages_locked(tsk, mm, start, nr_pages, write, force,
-                                      pages, vmas, NULL, false, FOLL_TOUCH);
+                                      pages, vmas, FOLL_TOUCH);
 }
 EXPORT_SYMBOL(get_user_pages);
 
_
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to