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)  }  static inline void -__add_page_to_lru_list(struct zone *zone, struct page *page, enum lru_list l, -		       struct list_head *head) +add_page_to_lru_list(struct zone *zone, struct page *page, enum lru_list lru)  { -	list_add(&page->lru, head); -	__mod_zone_page_state(zone, NR_LRU_BASE + l, hpage_nr_pages(page)); -	mem_cgroup_add_lru_list(page, l); -} +	struct lruvec *lruvec; -static inline void -add_page_to_lru_list(struct zone *zone, struct page *page, enum lru_list l) -{ -	__add_page_to_lru_list(zone, page, l, &zone->lru[l].list); +	lruvec = mem_cgroup_lru_add_list(zone, page, lru); +	list_add(&page->lru, &lruvec->lists[lru]); +	__mod_zone_page_state(zone, NR_LRU_BASE + lru, hpage_nr_pages(page));  }  static inline void -del_page_from_lru_list(struct zone *zone, struct page *page, enum lru_list l) +del_page_from_lru_list(struct zone *zone, struct page *page, enum lru_list lru)  { +	mem_cgroup_lru_del_list(page, lru);  	list_del(&page->lru); -	__mod_zone_page_state(zone, NR_LRU_BASE + l, -hpage_nr_pages(page)); -	mem_cgroup_del_lru_list(page, l); +	__mod_zone_page_state(zone, NR_LRU_BASE + lru, -hpage_nr_pages(page));  }  /** @@ -59,24 +54,28 @@ static inline enum lru_list page_lru_base_type(struct page *page)  	return LRU_INACTIVE_ANON;  } -static inline void -del_page_from_lru(struct zone *zone, struct page *page) +/** + * page_off_lru - which LRU list was page on? clearing its lru flags. + * @page: the page to test + * + * Returns the LRU list a page was on, as an index into the array of LRU + * lists; and clears its Unevictable or Active flags, ready for freeing. + */ +static inline enum lru_list page_off_lru(struct page *page)  { -	enum lru_list l; +	enum lru_list lru; -	list_del(&page->lru);  	if (PageUnevictable(page)) {  		__ClearPageUnevictable(page); -		l = LRU_UNEVICTABLE; +		lru = LRU_UNEVICTABLE;  	} else { -		l = page_lru_base_type(page); +		lru = page_lru_base_type(page);  		if (PageActive(page)) {  			__ClearPageActive(page); -			l += LRU_ACTIVE; +			lru += LRU_ACTIVE;  		}  	} -	__mod_zone_page_state(zone, NR_LRU_BASE + l, -hpage_nr_pages(page)); -	mem_cgroup_del_lru_list(page, l); +	return lru;  }  /** @@ -97,7 +96,6 @@ static inline enum lru_list page_lru(struct page *page)  		if (PageActive(page))  			lru += LRU_ACTIVE;  	} -  	return lru;  }  |