1 #ifndef LINUX_MM_INLINE_H 2 #define LINUX_MM_INLINE_H 3 4 /** 5 * page_is_file_cache - should the page be on a file LRU or anon LRU? 6 * @page: the page to test 7 * 8 * Returns 1 if @page is page cache page backed by a regular filesystem, 9 * or 0 if @page is anonymous, tmpfs or otherwise ram or swap backed. 10 * Used by functions that manipulate the LRU lists, to sort a page 11 * onto the right LRU list. 12 * 13 * We would like to get this info without a page flag, but the state 14 * needs to survive until the page is last deleted from the LRU, which 15 * could be as far down as __page_cache_release. 16 */ 17 static inline int page_is_file_cache(struct page *page) 18 { 19 return !PageSwapBacked(page); 20 } 21 22 static inline void 23 add_page_to_lru_list(struct zone *zone, struct page *page, enum lru_list l) 24 { 25 list_add(&page->lru, &zone->lru[l].list); 26 __inc_zone_state(zone, NR_LRU_BASE + l); 27 mem_cgroup_add_lru_list(page, l); 28 } 29 30 static inline void 31 del_page_from_lru_list(struct zone *zone, struct page *page, enum lru_list l) 32 { 33 list_del(&page->lru); 34 __dec_zone_state(zone, NR_LRU_BASE + l); 35 mem_cgroup_del_lru_list(page, l); 36 } 37 38 /** 39 * page_lru_base_type - which LRU list type should a page be on? 40 * @page: the page to test 41 * 42 * Used for LRU list index arithmetic. 43 * 44 * Returns the base LRU type - file or anon - @page should be on. 45 */ 46 static inline enum lru_list page_lru_base_type(struct page *page) 47 { 48 if (page_is_file_cache(page)) 49 return LRU_INACTIVE_FILE; 50 return LRU_INACTIVE_ANON; 51 } 52 53 static inline void 54 del_page_from_lru(struct zone *zone, struct page *page) 55 { 56 enum lru_list l; 57 58 list_del(&page->lru); 59 if (PageUnevictable(page)) { 60 __ClearPageUnevictable(page); 61 l = LRU_UNEVICTABLE; 62 } else { 63 l = page_lru_base_type(page); 64 if (PageActive(page)) { 65 __ClearPageActive(page); 66 l += LRU_ACTIVE; 67 } 68 } 69 __dec_zone_state(zone, NR_LRU_BASE + l); 70 mem_cgroup_del_lru_list(page, l); 71 } 72 73 /** 74 * page_lru - which LRU list should a page be on? 75 * @page: the page to test 76 * 77 * Returns the LRU list a page should be on, as an index 78 * into the array of LRU lists. 79 */ 80 static inline enum lru_list page_lru(struct page *page) 81 { 82 enum lru_list lru; 83 84 if (PageUnevictable(page)) 85 lru = LRU_UNEVICTABLE; 86 else { 87 lru = page_lru_base_type(page); 88 if (PageActive(page)) 89 lru += LRU_ACTIVE; 90 } 91 92 return lru; 93 } 94 95 #endif 96