mm: add free_hot_cold_page_list() helper
This patch adds helper free_hot_cold_page_list() to free list of 0-order pages. It frees pages directly from list without temporary page-vector. It also calls trace_mm_pagevec_free() to simulate pagevec_free() behaviour. bloat-o-meter: add/remove: 1/1 grow/shrink: 1/3 up/down: 267/-295 (-28) function old new delta free_hot_cold_page_list - 264 +264 get_page_from_freelist 2129 2132 +3 __pagevec_free 243 239 -4 split_free_page 380 373 -7 release_pages 606 510 -96 free_page_list 188 - -188 Signed-off-by: Konstantin Khlebnikov <khlebnikov@openvz.org> Cc: Mel Gorman <mel@csn.ul.ie> Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Acked-by: Minchan Kim <minchan.kim@gmail.com> Acked-by: Hugh Dickins <hughd@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
c909e99364
commit
cc59850ef9
20
mm/vmscan.c
20
mm/vmscan.c
@ -734,24 +734,6 @@ static enum page_references page_check_references(struct page *page,
|
||||
return PAGEREF_RECLAIM;
|
||||
}
|
||||
|
||||
static noinline_for_stack void free_page_list(struct list_head *free_pages)
|
||||
{
|
||||
struct pagevec freed_pvec;
|
||||
struct page *page, *tmp;
|
||||
|
||||
pagevec_init(&freed_pvec, 1);
|
||||
|
||||
list_for_each_entry_safe(page, tmp, free_pages, lru) {
|
||||
list_del(&page->lru);
|
||||
if (!pagevec_add(&freed_pvec, page)) {
|
||||
__pagevec_free(&freed_pvec);
|
||||
pagevec_reinit(&freed_pvec);
|
||||
}
|
||||
}
|
||||
|
||||
pagevec_free(&freed_pvec);
|
||||
}
|
||||
|
||||
/*
|
||||
* shrink_page_list() returns the number of reclaimed pages
|
||||
*/
|
||||
@ -1015,7 +997,7 @@ keep_lumpy:
|
||||
if (nr_dirty && nr_dirty == nr_congested && scanning_global_lru(sc))
|
||||
zone_set_flag(zone, ZONE_CONGESTED);
|
||||
|
||||
free_page_list(&free_pages);
|
||||
free_hot_cold_page_list(&free_pages, 1);
|
||||
|
||||
list_splice(&ret_pages, page_list);
|
||||
count_vm_events(PGACTIVATE, pgactivate);
|
||||
|
Reference in New Issue
Block a user