]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - mm/memcontrol.c
mm: memcontrol: push down mem_cgroup_nr_lru_pages()
[linux.git] / mm / memcontrol.c
index 81a0d3914ec999efcb36fb590e75c29d059d2b24..d29417b93a8b4e2c77c6d2bbab763493c74f456b 100644 (file)
@@ -725,7 +725,7 @@ static void mem_cgroup_charge_statistics(struct mem_cgroup *memcg,
        __this_cpu_add(memcg->stat_cpu->nr_page_events, nr_pages);
 }
 
-unsigned long mem_cgroup_node_nr_lru_pages(struct mem_cgroup *memcg,
+static unsigned long mem_cgroup_node_nr_lru_pages(struct mem_cgroup *memcg,
                                           int nid, unsigned int lru_mask)
 {
        struct lruvec *lruvec = mem_cgroup_lruvec(NODE_DATA(nid), memcg);
@@ -737,7 +737,7 @@ unsigned long mem_cgroup_node_nr_lru_pages(struct mem_cgroup *memcg,
        for_each_lru(lru) {
                if (!(BIT(lru) & lru_mask))
                        continue;
-               nr += mem_cgroup_get_lru_size(lruvec, lru);
+               nr += lruvec_page_state(lruvec, NR_LRU_BASE + lru);
        }
        return nr;
 }
@@ -746,10 +746,13 @@ static unsigned long mem_cgroup_nr_lru_pages(struct mem_cgroup *memcg,
                        unsigned int lru_mask)
 {
        unsigned long nr = 0;
-       int nid;
+       enum lru_list lru;
 
-       for_each_node_state(nid, N_MEMORY)
-               nr += mem_cgroup_node_nr_lru_pages(memcg, nid, lru_mask);
+       for_each_lru(lru) {
+               if (!(BIT(lru) & lru_mask))
+                       continue;
+               nr += memcg_page_state(memcg, NR_LRU_BASE + lru);
+       }
        return nr;
 }
 
@@ -1358,7 +1361,7 @@ void mem_cgroup_print_oom_meminfo(struct mem_cgroup *memcg)
 
                for (i = 0; i < NR_LRU_LISTS; i++)
                        pr_cont(" %s:%luKB", mem_cgroup_lru_names[i],
-                               K(mem_cgroup_nr_lru_pages(iter, BIT(i))));
+                               K(memcg_page_state(iter, NR_LRU_BASE + i)));
 
                pr_cont("\n");
        }
@@ -1422,11 +1425,15 @@ static bool mem_cgroup_out_of_memory(struct mem_cgroup *memcg, gfp_t gfp_mask,
 static bool test_mem_cgroup_node_reclaimable(struct mem_cgroup *memcg,
                int nid, bool noswap)
 {
-       if (mem_cgroup_node_nr_lru_pages(memcg, nid, LRU_ALL_FILE))
+       struct lruvec *lruvec = mem_cgroup_lruvec(NODE_DATA(nid), memcg);
+
+       if (lruvec_page_state(lruvec, NR_INACTIVE_FILE) ||
+           lruvec_page_state(lruvec, NR_ACTIVE_FILE))
                return true;
        if (noswap || !total_swap_pages)
                return false;
-       if (mem_cgroup_node_nr_lru_pages(memcg, nid, LRU_ALL_ANON))
+       if (lruvec_page_state(lruvec, NR_INACTIVE_ANON) ||
+           lruvec_page_state(lruvec, NR_ACTIVE_ANON))
                return true;
        return false;
 
@@ -2990,8 +2997,8 @@ static void accumulate_memcg_tree(struct mem_cgroup *memcg,
                                acc->events_array ? acc->events_array[i] : i);
 
                for (i = 0; i < NR_LRU_LISTS; i++)
-                       acc->lru_pages[i] +=
-                               mem_cgroup_nr_lru_pages(mi, BIT(i));
+                       acc->lru_pages[i] += memcg_page_state(mi,
+                                                             NR_LRU_BASE + i);
        }
 }
 
@@ -3421,7 +3428,8 @@ static int memcg_stat_show(struct seq_file *m, void *v)
 
        for (i = 0; i < NR_LRU_LISTS; i++)
                seq_printf(m, "%s %lu\n", mem_cgroup_lru_names[i],
-                          mem_cgroup_nr_lru_pages(memcg, BIT(i)) * PAGE_SIZE);
+                          memcg_page_state(memcg, NR_LRU_BASE + i) *
+                          PAGE_SIZE);
 
        /* Hierarchical information */
        memory = memsw = PAGE_COUNTER_MAX;
@@ -3927,8 +3935,8 @@ void mem_cgroup_wb_stats(struct bdi_writeback *wb, unsigned long *pfilepages,
 
        /* this should eventually include NR_UNSTABLE_NFS */
        *pwriteback = memcg_exact_page_state(memcg, NR_WRITEBACK);
-       *pfilepages = mem_cgroup_nr_lru_pages(memcg, (1 << LRU_INACTIVE_FILE) |
-                                                    (1 << LRU_ACTIVE_FILE));
+       *pfilepages = memcg_exact_page_state(memcg, NR_INACTIVE_FILE) +
+                       memcg_exact_page_state(memcg, NR_ACTIVE_FILE);
        *pheadroom = PAGE_COUNTER_MAX;
 
        while ((parent = parent_mem_cgroup(memcg))) {