Skip to content

Commit 72b03fc

Browse files
shakeelbtorvalds
authored andcommitted
mm: mlock: remove lru_add_drain_all()
lru_add_drain_all() is not required by mlock() and it will drain everything that has been cached at the time mlock is called. And that is not really related to the memory which will be faulted in (and cached) and mlocked by the syscall itself. If anything lru_add_drain_all() should be called _after_ pages have been mlocked and faulted in but even that is not strictly needed because those pages would get to the appropriate LRUs lazily during the reclaim path. Moreover follow_page_pte (gup) will drain the local pcp LRU cache. On larger machines the overhead of lru_add_drain_all() in mlock() can be significant when mlocking data already in memory. We have observed high latency in mlock() due to lru_add_drain_all() when the users were mlocking in memory tmpfs files. [[email protected]: changelog fix] Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Shakeel Butt <[email protected]> Acked-by: Michal Hocko <[email protected]> Acked-by: Balbir Singh <[email protected]> Acked-by: Vlastimil Babka <[email protected]> Cc: "Kirill A. Shutemov" <[email protected]> Cc: Joonsoo Kim <[email protected]> Cc: Minchan Kim <[email protected]> Cc: Yisheng Xie <[email protected]> Cc: Ingo Molnar <[email protected]> Cc: Greg Thelen <[email protected]> Cc: Hugh Dickins <[email protected]> Cc: Anshuman Khandual <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent 4518085 commit 72b03fc

File tree

1 file changed

+0
-5
lines changed

1 file changed

+0
-5
lines changed

mm/mlock.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -670,8 +670,6 @@ static __must_check int do_mlock(unsigned long start, size_t len, vm_flags_t fla
670670
if (!can_do_mlock())
671671
return -EPERM;
672672

673-
lru_add_drain_all(); /* flush pagevec */
674-
675673
len = PAGE_ALIGN(len + (offset_in_page(start)));
676674
start &= PAGE_MASK;
677675

@@ -798,9 +796,6 @@ SYSCALL_DEFINE1(mlockall, int, flags)
798796
if (!can_do_mlock())
799797
return -EPERM;
800798

801-
if (flags & MCL_CURRENT)
802-
lru_add_drain_all(); /* flush pagevec */
803-
804799
lock_limit = rlimit(RLIMIT_MEMLOCK);
805800
lock_limit >>= PAGE_SHIFT;
806801

0 commit comments

Comments
 (0)