Lines Matching refs:page

80 static void __page_cache_release(struct page *page)  in __page_cache_release()  argument
82 if (PageLRU(page)) { in __page_cache_release()
83 struct folio *folio = page_folio(page); in __page_cache_release()
88 del_page_from_lru_list(page, lruvec); in __page_cache_release()
89 __clear_page_lru_flags(page); in __page_cache_release()
92 __ClearPageWaiters(page); in __page_cache_release()
95 static void __put_single_page(struct page *page) in __put_single_page() argument
97 __page_cache_release(page); in __put_single_page()
98 mem_cgroup_uncharge(page_folio(page)); in __put_single_page()
99 free_unref_page(page, 0); in __put_single_page()
102 static void __put_compound_page(struct page *page) in __put_compound_page() argument
110 if (!PageHuge(page)) in __put_compound_page()
111 __page_cache_release(page); in __put_compound_page()
112 destroy_compound_page(page); in __put_compound_page()
115 void __put_page(struct page *page) in __put_page() argument
117 if (is_zone_device_page(page)) { in __put_page()
118 put_dev_pagemap(page->pgmap); in __put_page()
127 if (unlikely(PageCompound(page))) in __put_page()
128 __put_compound_page(page); in __put_page()
130 __put_single_page(page); in __put_page()
142 struct page *page, *next; in put_pages_list() local
144 list_for_each_entry_safe(page, next, pages, lru) { in put_pages_list()
145 if (!put_page_testzero(page)) { in put_pages_list()
146 list_del(&page->lru); in put_pages_list()
149 if (PageHead(page)) { in put_pages_list()
150 list_del(&page->lru); in put_pages_list()
151 __put_compound_page(page); in put_pages_list()
155 __ClearPageWaiters(page); in put_pages_list()
177 struct page **pages) in get_kernel_pages()
194 void (*move_fn)(struct page *page, struct lruvec *lruvec)) in pagevec_lru_move_fn() argument
201 struct page *page = pvec->pages[i]; in pagevec_lru_move_fn() local
202 struct folio *folio = page_folio(page); in pagevec_lru_move_fn()
205 if (!TestClearPageLRU(page)) in pagevec_lru_move_fn()
209 (*move_fn)(page, lruvec); in pagevec_lru_move_fn()
211 SetPageLRU(page); in pagevec_lru_move_fn()
219 static void pagevec_move_tail_fn(struct page *page, struct lruvec *lruvec) in pagevec_move_tail_fn() argument
221 struct folio *folio = page_folio(page); in pagevec_move_tail_fn()
232 static bool pagevec_add_and_need_flush(struct pagevec *pvec, struct page *page) in pagevec_add_and_need_flush() argument
236 if (!pagevec_add(pvec, page) || PageCompound(page) || in pagevec_add_and_need_flush()
260 if (pagevec_add_and_need_flush(pvec, &folio->page)) in folio_rotate_reclaimable()
329 static void __activate_page(struct page *page, struct lruvec *lruvec) in __activate_page() argument
331 return __folio_activate(page_folio(page), lruvec); in __activate_page()
356 if (pagevec_add_and_need_flush(pvec, &folio->page)) in folio_activate()
399 struct page *pagevec_page = pvec->pages[i]; in __lru_cache_activate_folio()
401 if (pagevec_page == &folio->page) { in __lru_cache_activate_folio()
468 if (pagevec_add_and_need_flush(pvec, &folio->page)) in folio_add_lru()
482 void lru_cache_add_inactive_or_unevictable(struct page *page, in lru_cache_add_inactive_or_unevictable() argument
487 VM_BUG_ON_PAGE(PageLRU(page), page); in lru_cache_add_inactive_or_unevictable()
490 if (unlikely(unevictable) && !TestSetPageMlocked(page)) { in lru_cache_add_inactive_or_unevictable()
491 int nr_pages = thp_nr_pages(page); in lru_cache_add_inactive_or_unevictable()
497 __mod_zone_page_state(page_zone(page), NR_MLOCK, nr_pages); in lru_cache_add_inactive_or_unevictable()
500 lru_cache_add(page); in lru_cache_add_inactive_or_unevictable()
524 static void lru_deactivate_file_fn(struct page *page, struct lruvec *lruvec) in lru_deactivate_file_fn() argument
526 bool active = PageActive(page); in lru_deactivate_file_fn()
527 int nr_pages = thp_nr_pages(page); in lru_deactivate_file_fn()
529 if (PageUnevictable(page)) in lru_deactivate_file_fn()
533 if (page_mapped(page)) in lru_deactivate_file_fn()
536 del_page_from_lru_list(page, lruvec); in lru_deactivate_file_fn()
537 ClearPageActive(page); in lru_deactivate_file_fn()
538 ClearPageReferenced(page); in lru_deactivate_file_fn()
540 if (PageWriteback(page) || PageDirty(page)) { in lru_deactivate_file_fn()
546 add_page_to_lru_list(page, lruvec); in lru_deactivate_file_fn()
547 SetPageReclaim(page); in lru_deactivate_file_fn()
553 add_page_to_lru_list_tail(page, lruvec); in lru_deactivate_file_fn()
564 static void lru_deactivate_fn(struct page *page, struct lruvec *lruvec) in lru_deactivate_fn() argument
566 if (PageActive(page) && !PageUnevictable(page)) { in lru_deactivate_fn()
567 int nr_pages = thp_nr_pages(page); in lru_deactivate_fn()
569 del_page_from_lru_list(page, lruvec); in lru_deactivate_fn()
570 ClearPageActive(page); in lru_deactivate_fn()
571 ClearPageReferenced(page); in lru_deactivate_fn()
572 add_page_to_lru_list(page, lruvec); in lru_deactivate_fn()
580 static void lru_lazyfree_fn(struct page *page, struct lruvec *lruvec) in lru_lazyfree_fn() argument
582 if (PageAnon(page) && PageSwapBacked(page) && in lru_lazyfree_fn()
583 !PageSwapCache(page) && !PageUnevictable(page)) { in lru_lazyfree_fn()
584 int nr_pages = thp_nr_pages(page); in lru_lazyfree_fn()
586 del_page_from_lru_list(page, lruvec); in lru_lazyfree_fn()
587 ClearPageActive(page); in lru_lazyfree_fn()
588 ClearPageReferenced(page); in lru_lazyfree_fn()
594 ClearPageSwapBacked(page); in lru_lazyfree_fn()
595 add_page_to_lru_list(page, lruvec); in lru_lazyfree_fn()
649 void deactivate_file_page(struct page *page) in deactivate_file_page() argument
655 if (PageUnevictable(page)) in deactivate_file_page()
658 if (likely(get_page_unless_zero(page))) { in deactivate_file_page()
664 if (pagevec_add_and_need_flush(pvec, page)) in deactivate_file_page()
678 void deactivate_page(struct page *page) in deactivate_page() argument
680 if (PageLRU(page) && PageActive(page) && !PageUnevictable(page)) { in deactivate_page()
685 get_page(page); in deactivate_page()
686 if (pagevec_add_and_need_flush(pvec, page)) in deactivate_page()
699 void mark_page_lazyfree(struct page *page) in mark_page_lazyfree() argument
701 if (PageLRU(page) && PageAnon(page) && PageSwapBacked(page) && in mark_page_lazyfree()
702 !PageSwapCache(page) && !PageUnevictable(page)) { in mark_page_lazyfree()
707 get_page(page); in mark_page_lazyfree()
708 if (pagevec_add_and_need_flush(pvec, page)) in mark_page_lazyfree()
902 void release_pages(struct page **pages, int nr) in release_pages()
911 struct page *page = pages[i]; in release_pages() local
912 struct folio *folio = page_folio(page); in release_pages()
924 page = &folio->page; in release_pages()
925 if (is_huge_zero_page(page)) in release_pages()
928 if (is_zone_device_page(page)) { in release_pages()
939 if (page_is_devmap_managed(page)) { in release_pages()
940 put_devmap_managed_page(page); in release_pages()
943 if (put_page_testzero(page)) in release_pages()
944 put_dev_pagemap(page->pgmap); in release_pages()
948 if (!put_page_testzero(page)) in release_pages()
951 if (PageCompound(page)) { in release_pages()
956 __put_compound_page(page); in release_pages()
960 if (PageLRU(page)) { in release_pages()
968 del_page_from_lru_list(page, lruvec); in release_pages()
969 __clear_page_lru_flags(page); in release_pages()
972 __ClearPageWaiters(page); in release_pages()
974 list_add(&page->lru, &pages_to_free); in release_pages()
1093 struct page *page = pvec->pages[i]; in pagevec_remove_exceptionals() local
1094 if (!xa_is_value(page)) in pagevec_remove_exceptionals()
1095 pvec->pages[j++] = page; in pagevec_remove_exceptionals()
1158 void put_devmap_managed_page(struct page *page) in put_devmap_managed_page() argument
1162 if (WARN_ON_ONCE(!page_is_devmap_managed(page))) in put_devmap_managed_page()
1165 count = page_ref_dec_return(page); in put_devmap_managed_page()
1173 free_devmap_managed_page(page); in put_devmap_managed_page()
1175 __put_page(page); in put_devmap_managed_page()