diff options
| author | Ingo Molnar <mingo@elte.hu> | 2009-01-11 03:41:39 +0100 | 
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-01-11 03:41:39 +0100 | 
| commit | abede81c4fb2e3b85d8760f25e3da39d2c69a134 (patch) | |
| tree | 26c893ec108d837eb9171d678c55a1cea7b22af4 /mm/swap.c | |
| parent | c9d557c19f94df42db78d4a5de4d25feee694bad (diff) | |
| parent | c59765042f53a79a7a65585042ff463b69cb248c (diff) | |
Merge commit 'v2.6.29-rc1' into core/urgent
Diffstat (limited to 'mm/swap.c')
| -rw-r--r-- | mm/swap.c | 33 | 
1 files changed, 26 insertions, 7 deletions
diff --git a/mm/swap.c b/mm/swap.c index ba2c0e8b8b54..8adb9feb61e1 100644 --- a/mm/swap.c +++ b/mm/swap.c @@ -151,6 +151,26 @@ void  rotate_reclaimable_page(struct page *page)  	}  } +static void update_page_reclaim_stat(struct zone *zone, struct page *page, +				     int file, int rotated) +{ +	struct zone_reclaim_stat *reclaim_stat = &zone->reclaim_stat; +	struct zone_reclaim_stat *memcg_reclaim_stat; + +	memcg_reclaim_stat = mem_cgroup_get_reclaim_stat_from_page(page); + +	reclaim_stat->recent_scanned[file]++; +	if (rotated) +		reclaim_stat->recent_rotated[file]++; + +	if (!memcg_reclaim_stat) +		return; + +	memcg_reclaim_stat->recent_scanned[file]++; +	if (rotated) +		memcg_reclaim_stat->recent_rotated[file]++; +} +  /*   * FIXME: speed this up?   */ @@ -168,10 +188,8 @@ void activate_page(struct page *page)  		lru += LRU_ACTIVE;  		add_page_to_lru_list(zone, page, lru);  		__count_vm_event(PGACTIVATE); -		mem_cgroup_move_lists(page, lru); -		zone->recent_rotated[!!file]++; -		zone->recent_scanned[!!file]++; +		update_page_reclaim_stat(zone, page, !!file, 1);  	}  	spin_unlock_irq(&zone->lru_lock);  } @@ -386,12 +404,14 @@ void ____pagevec_lru_add(struct pagevec *pvec, enum lru_list lru)  {  	int i;  	struct zone *zone = NULL; +  	VM_BUG_ON(is_unevictable_lru(lru));  	for (i = 0; i < pagevec_count(pvec); i++) {  		struct page *page = pvec->pages[i];  		struct zone *pagezone = page_zone(page);  		int file; +		int active;  		if (pagezone != zone) {  			if (zone) @@ -403,12 +423,11 @@ void ____pagevec_lru_add(struct pagevec *pvec, enum lru_list lru)  		VM_BUG_ON(PageUnevictable(page));  		VM_BUG_ON(PageLRU(page));  		SetPageLRU(page); +		active = is_active_lru(lru);  		file = is_file_lru(lru); -		zone->recent_scanned[file]++; -		if (is_active_lru(lru)) { +		if (active)  			SetPageActive(page); -			zone->recent_rotated[file]++; -		} +		update_page_reclaim_stat(zone, page, file, active);  		add_page_to_lru_list(zone, page, lru);  	}  	if (zone)  | 
