It is quite a maze of EXPORTED symbols leading up to the three actual worker functions of GUP. Simplify this by reorganizing some of the code so the EXPORTED symbols directly call the correct internal function with validated and consistent arguments. Consolidate all the assertions into one place at the top of the call chains. Remove some dead code. Jason Gunthorpe (8): mm/gup: have internal functions get the mmap_read_lock() mm/gup: don't call __gup_longterm_locked() if FOLL_LONGTERM cannot be set mm/gup: simplify the external interface functions and consolidate invariants mm/gup: add an assertion that the mmap lock is locked mm/gup: add FOLL_UNLOCK mm/gup: make locked never NULL in the internal GUP functions mm/gup: remove pin_user_pages_fast_only() mm/gup: make get_user_pages_fast_only() return the common return value include/linux/mm.h | 3 +- mm/gup.c | 319 +++++++++++++++++++++------------------------ mm/huge_memory.c | 10 -- 3 files changed, 150 insertions(+), 182 deletions(-) base-commit: 5dc4c995db9eb45f6373a956eb1f69460e69e6d4 -- 2.39.0