diff options
Diffstat (limited to 'mm/workingset.c')
| -rw-r--r-- | mm/workingset.c | 6 |
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 | ||
