diff options
Diffstat (limited to 'include/linux/mm_inline.h')
| -rw-r--r-- | include/linux/mm_inline.h | 44 |
1 files changed, 21 insertions, 23 deletions
diff --git a/include/linux/mm_inline.h b/include/linux/mm_inline.h index 8f7d24712dc1..227fd3e9a9c9 100644 --- a/include/linux/mm_inline.h +++ b/include/linux/mm_inline.h | |||
| @@ -22,26 +22,21 @@ static inline int page_is_file_cache(struct page *page) | |||
| 22 | } | 22 | } |
| 23 | 23 | ||
| 24 | static inline void | 24 | static inline void |
| 25 | __add_page_to_lru_list(struct zone *zone, struct page *page, enum lru_list l, | 25 | add_page_to_lru_list(struct zone *zone, struct page *page, enum lru_list lru) |
| 26 | struct list_head *head) | ||
| 27 | { | 26 | { |
| 28 | list_add(&page->lru, head); | 27 | struct lruvec *lruvec; |
| 29 | __mod_zone_page_state(zone, NR_LRU_BASE + l, hpage_nr_pages(page)); | ||
| 30 | mem_cgroup_add_lru_list(page, l); | ||
| 31 | } | ||
| 32 | 28 | ||
| 33 | static inline void | 29 | lruvec = mem_cgroup_lru_add_list(zone, page, lru); |
| 34 | add_page_to_lru_list(struct zone *zone, struct page *page, enum lru_list l) | 30 | list_add(&page->lru, &lruvec->lists[lru]); |
| 35 | { | 31 | __mod_zone_page_state(zone, NR_LRU_BASE + lru, hpage_nr_pages(page)); |
| 36 | __add_page_to_lru_list(zone, page, l, &zone->lru[l].list); | ||
| 37 | } | 32 | } |
| 38 | 33 | ||
| 39 | static inline void | 34 | static inline void |
| 40 | del_page_from_lru_list(struct zone *zone, struct page *page, enum lru_list l) | 35 | del_page_from_lru_list(struct zone *zone, struct page *page, enum lru_list lru) |
| 41 | { | 36 | { |
| 37 | mem_cgroup_lru_del_list(page, lru); | ||
| 42 | list_del(&page->lru); | 38 | list_del(&page->lru); |
| 43 | __mod_zone_page_state(zone, NR_LRU_BASE + l, -hpage_nr_pages(page)); | 39 | __mod_zone_page_state(zone, NR_LRU_BASE + lru, -hpage_nr_pages(page)); |
| 44 | mem_cgroup_del_lru_list(page, l); | ||
| 45 | } | 40 | } |
| 46 | 41 | ||
| 47 | /** | 42 | /** |
| @@ -59,24 +54,28 @@ static inline enum lru_list page_lru_base_type(struct page *page) | |||
| 59 | return LRU_INACTIVE_ANON; | 54 | return LRU_INACTIVE_ANON; |
| 60 | } | 55 | } |
| 61 | 56 | ||
| 62 | static inline void | 57 | /** |
| 63 | del_page_from_lru(struct zone *zone, struct page *page) | 58 | * page_off_lru - which LRU list was page on? clearing its lru flags. |
| 59 | * @page: the page to test | ||
| 60 | * | ||
| 61 | * Returns the LRU list a page was on, as an index into the array of LRU | ||
| 62 | * lists; and clears its Unevictable or Active flags, ready for freeing. | ||
| 63 | */ | ||
| 64 | static inline enum lru_list page_off_lru(struct page *page) | ||
| 64 | { | 65 | { |
| 65 | enum lru_list l; | 66 | enum lru_list lru; |
| 66 | 67 | ||
| 67 | list_del(&page->lru); | ||
| 68 | if (PageUnevictable(page)) { | 68 | if (PageUnevictable(page)) { |
| 69 | __ClearPageUnevictable(page); | 69 | __ClearPageUnevictable(page); |
| 70 | l = LRU_UNEVICTABLE; | 70 | lru = LRU_UNEVICTABLE; |
| 71 | } else { | 71 | } else { |
| 72 | l = page_lru_base_type(page); | 72 | lru = page_lru_base_type(page); |
| 73 | if (PageActive(page)) { | 73 | if (PageActive(page)) { |
| 74 | __ClearPageActive(page); | 74 | __ClearPageActive(page); |
| 75 | l += LRU_ACTIVE; | 75 | lru += LRU_ACTIVE; |
| 76 | } | 76 | } |
| 77 | } | 77 | } |
| 78 | __mod_zone_page_state(zone, NR_LRU_BASE + l, -hpage_nr_pages(page)); | 78 | return lru; |
| 79 | mem_cgroup_del_lru_list(page, l); | ||
| 80 | } | 79 | } |
| 81 | 80 | ||
| 82 | /** | 81 | /** |
| @@ -97,7 +96,6 @@ static inline enum lru_list page_lru(struct page *page) | |||
| 97 | if (PageActive(page)) | 96 | if (PageActive(page)) |
| 98 | lru += LRU_ACTIVE; | 97 | lru += LRU_ACTIVE; |
| 99 | } | 98 | } |
| 100 | |||
| 101 | return lru; | 99 | return lru; |
| 102 | } | 100 | } |
| 103 | 101 | ||
