Browse Source

get_user_pages_unlocked(): pass true to __get_user_pages_locked() notify_drop

Equivalent transformation - the only place in __get_user_pages_locked()
where we look at notify_drop argument is
	if (notify_drop && lock_dropped && *locked) {
		up_read(&mm->mmap_sem);
		*locked = 0;
	}
in the very end.  Changing notify_drop from false to true won't change
behaviour unless *locked is non-zero.  The caller is
        ret = __get_user_pages_locked(current, mm, start, nr_pages, pages, NULL,
			      &locked, false, gup_flags | FOLL_TOUCH);
	if (locked)
		up_read(&mm->mmap_sem);
so in that case the original kernel would have done up_read() right after
return from __get_user_pages_locked(), while the modified one would've done
it right before the return.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Al Viro 7 years ago
parent
commit
14cb138d7c
1 changed files with 1 additions and 1 deletions
  1. 1 1
      mm/gup.c

+ 1 - 1
mm/gup.c

@@ -988,7 +988,7 @@ long get_user_pages_unlocked(unsigned long start, unsigned long nr_pages,
 
 
 	down_read(&mm->mmap_sem);
 	down_read(&mm->mmap_sem);
 	ret = __get_user_pages_locked(current, mm, start, nr_pages, pages, NULL,
 	ret = __get_user_pages_locked(current, mm, start, nr_pages, pages, NULL,
-				      &locked, false, gup_flags | FOLL_TOUCH);
+				      &locked, true, gup_flags | FOLL_TOUCH);
 	if (locked)
 	if (locked)
 		up_read(&mm->mmap_sem);
 		up_read(&mm->mmap_sem);
 	return ret;
 	return ret;