--- 87627f181c3f333075cb15773bd3d45db3ec1ea9 +++ c4e19bbb7a4d009368c7cf89441cf3da4a7ac913 @@ -371,15 +371,23 @@ void mark_page_accessed(struct page *pag EXPORT_SYMBOL(mark_page_accessed); -void __lru_cache_add(struct page *page, enum lru_list lru) +void ______pagevec_lru_add(struct pagevec *pvec, enum lru_list lru, int tail); + +void ____lru_cache_add(struct page *page, enum lru_list lru, int tail) { struct pagevec *pvec = &get_cpu_var(lru_add_pvecs)[lru]; page_cache_get(page); if (!pagevec_add(pvec, page)) - ____pagevec_lru_add(pvec, lru); + ______pagevec_lru_add(pvec, lru, tail); put_cpu_var(lru_add_pvecs); } +EXPORT_SYMBOL(____lru_cache_add); + +void __lru_cache_add(struct page *page, enum lru_list lru) +{ + ____lru_cache_add(page, lru, 0); +} EXPORT_SYMBOL(__lru_cache_add); /** @@ -387,7 +395,7 @@ EXPORT_SYMBOL(__lru_cache_add); * @page: the page to be added to the LRU. * @lru: the LRU list to which the page is added. */ -void lru_cache_add_lru(struct page *page, enum lru_list lru) +void __lru_cache_add_lru(struct page *page, enum lru_list lru, int tail) { if (PageActive(page)) { VM_BUG_ON(PageUnevictable(page)); @@ -398,7 +406,12 @@ void lru_cache_add_lru(struct page *page } VM_BUG_ON(PageLRU(page) || PageActive(page) || PageUnevictable(page)); - __lru_cache_add(page, lru); + ____lru_cache_add(page, lru, tail); +} + +void lru_cache_add_lru(struct page *page, enum lru_list lru) +{ + __lru_cache_add_lru(page, lru, 0); } /** @@ -685,7 +698,7 @@ void lru_add_page_tail(struct zone* zone head = page->lru.prev; else head = &zone->lru[lru].list; - __add_page_to_lru_list(zone, page_tail, lru, head); + __add_page_to_lru_list(zone, page_tail, lru, head, 0); } else { SetPageUnevictable(page_tail); add_page_to_lru_list(zone, page_tail, LRU_UNEVICTABLE); @@ -714,13 +727,18 @@ static void ____pagevec_lru_add_fn(struc * Add the passed pages to the LRU, then drop the caller's refcount * on them. Reinitialises the caller's pagevec. */ -void ____pagevec_lru_add(struct pagevec *pvec, enum lru_list lru) +void ______pagevec_lru_add(struct pagevec *pvec, enum lru_list lru, int tail) { VM_BUG_ON(is_unevictable_lru(lru)); pagevec_lru_move_fn(pvec, ____pagevec_lru_add_fn, (void *)lru); } +void ____pagevec_lru_add(struct pagevec *pvec, enum lru_list lru) +{ + ______pagevec_lru_add(pvec, lru, 0); +} + EXPORT_SYMBOL(____pagevec_lru_add); /*