Lines Matching refs:page
57 void clear_page_mlock(struct page *page) in clear_page_mlock() argument
59 if (!TestClearPageMlocked(page)) in clear_page_mlock()
62 mod_zone_page_state(page_zone(page), NR_MLOCK, in clear_page_mlock()
63 -hpage_nr_pages(page)); in clear_page_mlock()
65 if (!isolate_lru_page(page)) { in clear_page_mlock()
66 putback_lru_page(page); in clear_page_mlock()
71 if (PageUnevictable(page)) in clear_page_mlock()
80 void mlock_vma_page(struct page *page) in mlock_vma_page() argument
83 BUG_ON(!PageLocked(page)); in mlock_vma_page()
85 if (!TestSetPageMlocked(page)) { in mlock_vma_page()
86 mod_zone_page_state(page_zone(page), NR_MLOCK, in mlock_vma_page()
87 hpage_nr_pages(page)); in mlock_vma_page()
89 if (!isolate_lru_page(page)) in mlock_vma_page()
90 putback_lru_page(page); in mlock_vma_page()
98 static bool __munlock_isolate_lru_page(struct page *page, bool getpage) in __munlock_isolate_lru_page() argument
100 if (PageLRU(page)) { in __munlock_isolate_lru_page()
103 lruvec = mem_cgroup_page_lruvec(page, page_zone(page)); in __munlock_isolate_lru_page()
105 get_page(page); in __munlock_isolate_lru_page()
106 ClearPageLRU(page); in __munlock_isolate_lru_page()
107 del_page_from_lru_list(page, lruvec, page_lru(page)); in __munlock_isolate_lru_page()
120 static void __munlock_isolated_page(struct page *page) in __munlock_isolated_page() argument
128 if (page_mapcount(page) > 1) in __munlock_isolated_page()
129 ret = try_to_munlock(page); in __munlock_isolated_page()
135 putback_lru_page(page); in __munlock_isolated_page()
147 static void __munlock_isolation_failed(struct page *page) in __munlock_isolation_failed() argument
149 if (PageUnevictable(page)) in __munlock_isolation_failed()
173 unsigned int munlock_vma_page(struct page *page) in munlock_vma_page() argument
176 struct zone *zone = page_zone(page); in munlock_vma_page()
179 BUG_ON(!PageLocked(page)); in munlock_vma_page()
188 nr_pages = hpage_nr_pages(page); in munlock_vma_page()
189 if (!TestClearPageMlocked(page)) in munlock_vma_page()
194 if (__munlock_isolate_lru_page(page, true)) { in munlock_vma_page()
196 __munlock_isolated_page(page); in munlock_vma_page()
199 __munlock_isolation_failed(page); in munlock_vma_page()
232 static bool __putback_lru_fast_prepare(struct page *page, struct pagevec *pvec, in __putback_lru_fast_prepare() argument
235 VM_BUG_ON_PAGE(PageLRU(page), page); in __putback_lru_fast_prepare()
236 VM_BUG_ON_PAGE(!PageLocked(page), page); in __putback_lru_fast_prepare()
238 if (page_mapcount(page) <= 1 && page_evictable(page)) { in __putback_lru_fast_prepare()
239 pagevec_add(pvec, page); in __putback_lru_fast_prepare()
240 if (TestClearPageUnevictable(page)) in __putback_lru_fast_prepare()
242 unlock_page(page); in __putback_lru_fast_prepare()
289 struct page *page = pvec->pages[i]; in __munlock_pagevec() local
291 if (TestClearPageMlocked(page)) { in __munlock_pagevec()
296 if (__munlock_isolate_lru_page(page, false)) in __munlock_pagevec()
299 __munlock_isolation_failed(page); in __munlock_pagevec()
320 struct page *page = pvec->pages[i]; in __munlock_pagevec() local
322 if (page) { in __munlock_pagevec()
323 lock_page(page); in __munlock_pagevec()
324 if (!__putback_lru_fast_prepare(page, &pvec_putback, in __munlock_pagevec()
330 get_page(page); /* for putback_lru_page() */ in __munlock_pagevec()
331 __munlock_isolated_page(page); in __munlock_pagevec()
332 unlock_page(page); in __munlock_pagevec()
333 put_page(page); /* from follow_page_mask() */ in __munlock_pagevec()
380 struct page *page = NULL; in __munlock_pagevec_fill() local
383 page = vm_normal_page(vma, start, *pte); in __munlock_pagevec_fill()
388 if (!page || page_zone_id(page) != zoneid) in __munlock_pagevec_fill()
391 get_page(page); in __munlock_pagevec_fill()
397 if (pagevec_add(pvec, page) == 0) in __munlock_pagevec_fill()
428 struct page *page = NULL; in munlock_vma_pages_range() local
443 page = follow_page_mask(vma, start, FOLL_GET | FOLL_DUMP, in munlock_vma_pages_range()
446 if (page && !IS_ERR(page)) { in munlock_vma_pages_range()
447 if (PageTransHuge(page)) { in munlock_vma_pages_range()
448 lock_page(page); in munlock_vma_pages_range()
455 page_mask = munlock_vma_page(page); in munlock_vma_pages_range()
456 unlock_page(page); in munlock_vma_pages_range()
457 put_page(page); /* follow_page_mask() */ in munlock_vma_pages_range()
464 pagevec_add(&pvec, page); in munlock_vma_pages_range()
465 zone = page_zone(page); in munlock_vma_pages_range()
466 zoneid = page_zone_id(page); in munlock_vma_pages_range()