Merge tag 'folio-5.18c' of git://git.infradead.org/users/willy/pagecache
[linux-2.6-microblaze.git] / include / linux / list_lru.h
index 1b5fceb..b35968e 100644 (file)
@@ -11,6 +11,7 @@
 #include <linux/list.h>
 #include <linux/nodemask.h>
 #include <linux/shrinker.h>
+#include <linux/xarray.h>
 
 struct mem_cgroup;
 
@@ -33,8 +34,8 @@ struct list_lru_one {
 
 struct list_lru_memcg {
        struct rcu_head         rcu;
-       /* array of per cgroup lists, indexed by memcg_cache_id */
-       struct list_lru_one     *lru[];
+       /* array of per cgroup per node lists, indexed by node id */
+       struct list_lru_one     node[];
 };
 
 struct list_lru_node {
@@ -42,11 +43,7 @@ struct list_lru_node {
        spinlock_t              lock;
        /* global list, used for the root cgroup in cgroup aware lrus */
        struct list_lru_one     lru;
-#ifdef CONFIG_MEMCG_KMEM
-       /* for cgroup aware lrus points to per cgroup lists, otherwise NULL */
-       struct list_lru_memcg   __rcu *memcg_lrus;
-#endif
-       long nr_items;
+       long                    nr_items;
 } ____cacheline_aligned_in_smp;
 
 struct list_lru {
@@ -55,6 +52,7 @@ struct list_lru {
        struct list_head        list;
        int                     shrinker_id;
        bool                    memcg_aware;
+       struct xarray           xa;
 #endif
 };
 
@@ -69,8 +67,9 @@ int __list_lru_init(struct list_lru *lru, bool memcg_aware,
 #define list_lru_init_memcg(lru, shrinker)             \
        __list_lru_init((lru), true, NULL, shrinker)
 
-int memcg_update_all_list_lrus(int num_memcgs);
-void memcg_drain_all_list_lrus(int src_idx, struct mem_cgroup *dst_memcg);
+int memcg_list_lru_alloc(struct mem_cgroup *memcg, struct list_lru *lru,
+                        gfp_t gfp);
+void memcg_reparent_list_lrus(struct mem_cgroup *memcg, struct mem_cgroup *parent);
 
 /**
  * list_lru_add: add an element to the lru list's tail