aboutsummaryrefslogtreecommitdiffstats
path: root/mm/workingset.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/workingset.c')
-rw-r--r--mm/workingset.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/mm/workingset.c b/mm/workingset.c
index eda05c71fa49..b8c9ab678479 100644
--- a/mm/workingset.c
+++ b/mm/workingset.c
@@ -269,7 +269,6 @@ bool workingset_refault(void *shadow)
269 lruvec = mem_cgroup_lruvec(pgdat, memcg); 269 lruvec = mem_cgroup_lruvec(pgdat, memcg);
270 refault = atomic_long_read(&lruvec->inactive_age); 270 refault = atomic_long_read(&lruvec->inactive_age);
271 active_file = lruvec_lru_size(lruvec, LRU_ACTIVE_FILE, MAX_NR_ZONES); 271 active_file = lruvec_lru_size(lruvec, LRU_ACTIVE_FILE, MAX_NR_ZONES);
272 rcu_read_unlock();
273 272
274 /* 273 /*
275 * The unsigned subtraction here gives an accurate distance 274 * The unsigned subtraction here gives an accurate distance
@@ -290,11 +289,15 @@ bool workingset_refault(void *shadow)
290 refault_distance = (refault - eviction) & EVICTION_MASK; 289 refault_distance = (refault - eviction) & EVICTION_MASK;
291 290
292 inc_node_state(pgdat, WORKINGSET_REFAULT); 291 inc_node_state(pgdat, WORKINGSET_REFAULT);
292 inc_memcg_state(memcg, WORKINGSET_REFAULT);
293 293
294 if (refault_distance <= active_file) { 294 if (refault_distance <= active_file) {
295 inc_node_state(pgdat, WORKINGSET_ACTIVATE); 295 inc_node_state(pgdat, WORKINGSET_ACTIVATE);
296 inc_memcg_state(memcg, WORKINGSET_ACTIVATE);
297 rcu_read_unlock();
296 return true; 298 return true;
297 } 299 }
300 rcu_read_unlock();
298 return false; 301 return false;
299} 302}
300 303
@@ -472,6 +475,7 @@ static enum lru_status shadow_lru_isolate(struct list_head *item,
472 if (WARN_ON_ONCE(node->exceptional)) 475 if (WARN_ON_ONCE(node->exceptional))
473 goto out_invalid; 476 goto out_invalid;
474 inc_node_state(page_pgdat(virt_to_page(node)), WORKINGSET_NODERECLAIM); 477 inc_node_state(page_pgdat(virt_to_page(node)), WORKINGSET_NODERECLAIM);
478 inc_memcg_page_state(virt_to_page(node), WORKINGSET_NODERECLAIM);
475 __radix_tree_delete_node(&mapping->page_tree, node, 479 __radix_tree_delete_node(&mapping->page_tree, node,
476 workingset_update_node, mapping); 480 workingset_update_node, mapping);
477 481