Lines Matching refs:page
109 #define lru_to_page(_head) (list_entry((_head)->prev, struct page, lru))
115 struct page *prev; \
129 struct page *prev; \
445 static inline int is_page_cache_freeable(struct page *page) in is_page_cache_freeable() argument
452 return page_count(page) - page_has_private(page) == 2; in is_page_cache_freeable()
480 struct page *page, int error) in handle_write_error() argument
482 lock_page(page); in handle_write_error()
483 if (page_mapping(page) == mapping) in handle_write_error()
485 unlock_page(page); in handle_write_error()
504 static pageout_t pageout(struct page *page, struct address_space *mapping, in pageout() argument
523 if (!is_page_cache_freeable(page)) in pageout()
530 if (page_has_private(page)) { in pageout()
531 if (try_to_free_buffers(page)) { in pageout()
532 ClearPageDirty(page); in pageout()
544 if (clear_page_dirty_for_io(page)) { in pageout()
554 SetPageReclaim(page); in pageout()
555 res = mapping->a_ops->writepage(page, &wbc); in pageout()
557 handle_write_error(mapping, page, res); in pageout()
559 ClearPageReclaim(page); in pageout()
563 if (!PageWriteback(page)) { in pageout()
565 ClearPageReclaim(page); in pageout()
567 trace_mm_vmscan_writepage(page, trace_reclaim_flags(page)); in pageout()
568 inc_zone_page_state(page, NR_VMSCAN_WRITE); in pageout()
579 static int __remove_mapping(struct address_space *mapping, struct page *page, in __remove_mapping() argument
582 BUG_ON(!PageLocked(page)); in __remove_mapping()
583 BUG_ON(mapping != page_mapping(page)); in __remove_mapping()
611 if (!page_freeze_refs(page, 2)) in __remove_mapping()
614 if (unlikely(PageDirty(page))) { in __remove_mapping()
615 page_unfreeze_refs(page, 2); in __remove_mapping()
619 if (PageSwapCache(page)) { in __remove_mapping()
620 swp_entry_t swap = { .val = page_private(page) }; in __remove_mapping()
621 mem_cgroup_swapout(page, swap); in __remove_mapping()
622 __delete_from_swap_cache(page); in __remove_mapping()
626 void (*freepage)(struct page *); in __remove_mapping()
640 if (reclaimed && page_is_file_cache(page) && in __remove_mapping()
642 shadow = workingset_eviction(mapping, page); in __remove_mapping()
643 __delete_from_page_cache(page, shadow); in __remove_mapping()
647 freepage(page); in __remove_mapping()
663 int remove_mapping(struct address_space *mapping, struct page *page) in remove_mapping() argument
665 if (__remove_mapping(mapping, page, false)) { in remove_mapping()
671 page_unfreeze_refs(page, 1); in remove_mapping()
686 void putback_lru_page(struct page *page) in putback_lru_page() argument
689 int was_unevictable = PageUnevictable(page); in putback_lru_page()
691 VM_BUG_ON_PAGE(PageLRU(page), page); in putback_lru_page()
694 ClearPageUnevictable(page); in putback_lru_page()
696 if (page_evictable(page)) { in putback_lru_page()
704 lru_cache_add(page); in putback_lru_page()
711 add_page_to_unevictable_list(page); in putback_lru_page()
730 if (is_unevictable && page_evictable(page)) { in putback_lru_page()
731 if (!isolate_lru_page(page)) { in putback_lru_page()
732 put_page(page); in putback_lru_page()
746 put_page(page); /* drop ref from isolate */ in putback_lru_page()
756 static enum page_references page_check_references(struct page *page, in page_check_references() argument
762 referenced_ptes = page_referenced(page, 1, sc->target_mem_cgroup, in page_check_references()
764 referenced_page = TestClearPageReferenced(page); in page_check_references()
774 if (PageSwapBacked(page)) in page_check_references()
790 SetPageReferenced(page); in page_check_references()
805 if (referenced_page && !PageSwapBacked(page)) in page_check_references()
812 static void page_check_dirty_writeback(struct page *page, in page_check_dirty_writeback() argument
821 if (!page_is_file_cache(page)) { in page_check_dirty_writeback()
828 *dirty = PageDirty(page); in page_check_dirty_writeback()
829 *writeback = PageWriteback(page); in page_check_dirty_writeback()
832 if (!page_has_private(page)) in page_check_dirty_writeback()
835 mapping = page_mapping(page); in page_check_dirty_writeback()
837 mapping->a_ops->is_dirty_writeback(page, dirty, writeback); in page_check_dirty_writeback()
868 struct page *page; in shrink_page_list() local
875 page = lru_to_page(page_list); in shrink_page_list()
876 list_del(&page->lru); in shrink_page_list()
878 if (!trylock_page(page)) in shrink_page_list()
881 VM_BUG_ON_PAGE(PageActive(page), page); in shrink_page_list()
882 VM_BUG_ON_PAGE(page_zone(page) != zone, page); in shrink_page_list()
886 if (unlikely(!page_evictable(page))) in shrink_page_list()
889 if (!sc->may_unmap && page_mapped(page)) in shrink_page_list()
893 if (page_mapped(page) || PageSwapCache(page)) in shrink_page_list()
897 (PageSwapCache(page) && (sc->gfp_mask & __GFP_IO)); in shrink_page_list()
905 page_check_dirty_writeback(page, &dirty, &writeback); in shrink_page_list()
918 mapping = page_mapping(page); in shrink_page_list()
921 (writeback && PageReclaim(page))) in shrink_page_list()
957 if (PageWriteback(page)) { in shrink_page_list()
960 PageReclaim(page) && in shrink_page_list()
967 !PageReclaim(page) || !may_enter_fs) { in shrink_page_list()
979 SetPageReclaim(page); in shrink_page_list()
986 wait_on_page_writeback(page); in shrink_page_list()
991 references = page_check_references(page, sc); in shrink_page_list()
1007 if (PageAnon(page) && !PageSwapCache(page)) { in shrink_page_list()
1010 if (!add_to_swap(page, page_list)) in shrink_page_list()
1015 mapping = page_mapping(page); in shrink_page_list()
1022 if (page_mapped(page) && mapping) { in shrink_page_list()
1023 switch (try_to_unmap(page, ttu_flags)) { in shrink_page_list()
1035 if (PageDirty(page)) { in shrink_page_list()
1041 if (page_is_file_cache(page) && in shrink_page_list()
1050 inc_zone_page_state(page, NR_VMSCAN_IMMEDIATE); in shrink_page_list()
1051 SetPageReclaim(page); in shrink_page_list()
1064 switch (pageout(page, mapping, sc)) { in shrink_page_list()
1070 if (PageWriteback(page)) in shrink_page_list()
1072 if (PageDirty(page)) in shrink_page_list()
1079 if (!trylock_page(page)) in shrink_page_list()
1081 if (PageDirty(page) || PageWriteback(page)) in shrink_page_list()
1083 mapping = page_mapping(page); in shrink_page_list()
1110 if (page_has_private(page)) { in shrink_page_list()
1111 if (!try_to_release_page(page, sc->gfp_mask)) in shrink_page_list()
1113 if (!mapping && page_count(page) == 1) { in shrink_page_list()
1114 unlock_page(page); in shrink_page_list()
1115 if (put_page_testzero(page)) in shrink_page_list()
1131 if (!mapping || !__remove_mapping(mapping, page, true)) in shrink_page_list()
1141 __clear_page_locked(page); in shrink_page_list()
1149 list_add(&page->lru, &free_pages); in shrink_page_list()
1153 if (PageSwapCache(page)) in shrink_page_list()
1154 try_to_free_swap(page); in shrink_page_list()
1155 unlock_page(page); in shrink_page_list()
1156 list_add(&page->lru, &ret_pages); in shrink_page_list()
1161 if (PageSwapCache(page) && vm_swap_full()) in shrink_page_list()
1162 try_to_free_swap(page); in shrink_page_list()
1163 VM_BUG_ON_PAGE(PageActive(page), page); in shrink_page_list()
1164 SetPageActive(page); in shrink_page_list()
1167 unlock_page(page); in shrink_page_list()
1169 list_add(&page->lru, &ret_pages); in shrink_page_list()
1170 VM_BUG_ON_PAGE(PageLRU(page) || PageUnevictable(page), page); in shrink_page_list()
1196 struct page *page, *next; in reclaim_clean_pages_from_list() local
1199 list_for_each_entry_safe(page, next, page_list, lru) { in reclaim_clean_pages_from_list()
1200 if (page_is_file_cache(page) && !PageDirty(page) && in reclaim_clean_pages_from_list()
1201 !isolated_balloon_page(page)) { in reclaim_clean_pages_from_list()
1202 ClearPageActive(page); in reclaim_clean_pages_from_list()
1203 list_move(&page->lru, &clean_pages); in reclaim_clean_pages_from_list()
1225 int __isolate_lru_page(struct page *page, isolate_mode_t mode) in __isolate_lru_page() argument
1230 if (!PageLRU(page)) in __isolate_lru_page()
1234 if (PageUnevictable(page) && !(mode & ISOLATE_UNEVICTABLE)) in __isolate_lru_page()
1252 if (PageWriteback(page)) in __isolate_lru_page()
1255 if (PageDirty(page)) { in __isolate_lru_page()
1267 mapping = page_mapping(page); in __isolate_lru_page()
1273 if ((mode & ISOLATE_UNMAPPED) && page_mapped(page)) in __isolate_lru_page()
1276 if (likely(get_page_unless_zero(page))) { in __isolate_lru_page()
1282 ClearPageLRU(page); in __isolate_lru_page()
1319 struct page *page; in isolate_lru_pages() local
1322 page = lru_to_page(src); in isolate_lru_pages()
1323 prefetchw_prev_lru_page(page, src, flags); in isolate_lru_pages()
1325 VM_BUG_ON_PAGE(!PageLRU(page), page); in isolate_lru_pages()
1327 switch (__isolate_lru_page(page, mode)) { in isolate_lru_pages()
1329 nr_pages = hpage_nr_pages(page); in isolate_lru_pages()
1331 list_move(&page->lru, dst); in isolate_lru_pages()
1337 list_move(&page->lru, src); in isolate_lru_pages()
1376 int isolate_lru_page(struct page *page) in isolate_lru_page() argument
1380 VM_BUG_ON_PAGE(!page_count(page), page); in isolate_lru_page()
1382 if (PageLRU(page)) { in isolate_lru_page()
1383 struct zone *zone = page_zone(page); in isolate_lru_page()
1387 lruvec = mem_cgroup_page_lruvec(page, zone); in isolate_lru_page()
1388 if (PageLRU(page)) { in isolate_lru_page()
1389 int lru = page_lru(page); in isolate_lru_page()
1390 get_page(page); in isolate_lru_page()
1391 ClearPageLRU(page); in isolate_lru_page()
1392 del_page_from_lru_list(page, lruvec, lru); in isolate_lru_page()
1448 struct page *page = lru_to_page(page_list); in putback_inactive_pages() local
1451 VM_BUG_ON_PAGE(PageLRU(page), page); in putback_inactive_pages()
1452 list_del(&page->lru); in putback_inactive_pages()
1453 if (unlikely(!page_evictable(page))) { in putback_inactive_pages()
1455 putback_lru_page(page); in putback_inactive_pages()
1460 lruvec = mem_cgroup_page_lruvec(page, zone); in putback_inactive_pages()
1462 SetPageLRU(page); in putback_inactive_pages()
1463 lru = page_lru(page); in putback_inactive_pages()
1464 add_page_to_lru_list(page, lruvec, lru); in putback_inactive_pages()
1468 int numpages = hpage_nr_pages(page); in putback_inactive_pages()
1471 if (put_page_testzero(page)) { in putback_inactive_pages()
1472 __ClearPageLRU(page); in putback_inactive_pages()
1473 __ClearPageActive(page); in putback_inactive_pages()
1474 del_page_from_lru_list(page, lruvec, lru); in putback_inactive_pages()
1476 if (unlikely(PageCompound(page))) { in putback_inactive_pages()
1478 mem_cgroup_uncharge(page); in putback_inactive_pages()
1479 (*get_compound_page_dtor(page))(page); in putback_inactive_pages()
1482 list_add(&page->lru, &pages_to_free); in putback_inactive_pages()
1679 struct page *page; in move_active_pages_to_lru() local
1683 page = lru_to_page(list); in move_active_pages_to_lru()
1684 lruvec = mem_cgroup_page_lruvec(page, zone); in move_active_pages_to_lru()
1686 VM_BUG_ON_PAGE(PageLRU(page), page); in move_active_pages_to_lru()
1687 SetPageLRU(page); in move_active_pages_to_lru()
1689 nr_pages = hpage_nr_pages(page); in move_active_pages_to_lru()
1691 list_move(&page->lru, &lruvec->lists[lru]); in move_active_pages_to_lru()
1694 if (put_page_testzero(page)) { in move_active_pages_to_lru()
1695 __ClearPageLRU(page); in move_active_pages_to_lru()
1696 __ClearPageActive(page); in move_active_pages_to_lru()
1697 del_page_from_lru_list(page, lruvec, lru); in move_active_pages_to_lru()
1699 if (unlikely(PageCompound(page))) { in move_active_pages_to_lru()
1701 mem_cgroup_uncharge(page); in move_active_pages_to_lru()
1702 (*get_compound_page_dtor(page))(page); in move_active_pages_to_lru()
1705 list_add(&page->lru, pages_to_free); in move_active_pages_to_lru()
1724 struct page *page; in shrink_active_list() local
1754 page = lru_to_page(&l_hold); in shrink_active_list()
1755 list_del(&page->lru); in shrink_active_list()
1757 if (unlikely(!page_evictable(page))) { in shrink_active_list()
1758 putback_lru_page(page); in shrink_active_list()
1763 if (page_has_private(page) && trylock_page(page)) { in shrink_active_list()
1764 if (page_has_private(page)) in shrink_active_list()
1765 try_to_release_page(page, 0); in shrink_active_list()
1766 unlock_page(page); in shrink_active_list()
1770 if (page_referenced(page, 0, sc->target_mem_cgroup, in shrink_active_list()
1772 nr_rotated += hpage_nr_pages(page); in shrink_active_list()
1782 if ((vm_flags & VM_EXEC) && page_is_file_cache(page)) { in shrink_active_list()
1783 list_add(&page->lru, &l_active); in shrink_active_list()
1788 ClearPageActive(page); /* we are de-activating */ in shrink_active_list()
1789 list_add(&page->lru, &l_inactive); in shrink_active_list()
3767 int page_evictable(struct page *page) in page_evictable() argument
3769 return !mapping_unevictable(page_mapping(page)) && !PageMlocked(page); in page_evictable()
3782 void check_move_unevictable_pages(struct page **pages, int nr_pages) in check_move_unevictable_pages()
3791 struct page *page = pages[i]; in check_move_unevictable_pages() local
3795 pagezone = page_zone(page); in check_move_unevictable_pages()
3802 lruvec = mem_cgroup_page_lruvec(page, zone); in check_move_unevictable_pages()
3804 if (!PageLRU(page) || !PageUnevictable(page)) in check_move_unevictable_pages()
3807 if (page_evictable(page)) { in check_move_unevictable_pages()
3808 enum lru_list lru = page_lru_base_type(page); in check_move_unevictable_pages()
3810 VM_BUG_ON_PAGE(PageActive(page), page); in check_move_unevictable_pages()
3811 ClearPageUnevictable(page); in check_move_unevictable_pages()
3812 del_page_from_lru_list(page, lruvec, LRU_UNEVICTABLE); in check_move_unevictable_pages()
3813 add_page_to_lru_list(page, lruvec, lru); in check_move_unevictable_pages()