at v2.6.34 2.3 kB view raw
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 */ 17static inline int page_is_file_cache(struct page *page) 18{ 19 return !PageSwapBacked(page); 20} 21 22static inline void 23add_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 30static inline void 31del_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 */ 46static 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 53static inline void 54del_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 */ 80static 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