mm: list_lru: replace linear array with xarray
[linux-block.git] / include / linux / list_lru.h
index 4b00fd8cb373a764d8eb121d0ec32f5488475c98..572c263561ac830cd77bab6ec96c2aaf6e78d1c5 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;
 
@@ -37,12 +38,6 @@ struct list_lru_per_memcg {
        struct list_lru_one     node[];
 };
 
-struct list_lru_memcg {
-       struct rcu_head                 rcu;
-       /* array of per cgroup lists, indexed by memcg_cache_id */
-       struct list_lru_per_memcg __rcu *mlru[];
-};
-
 struct list_lru_node {
        /* protects all lists on the node, including per cgroup */
        spinlock_t              lock;
@@ -57,10 +52,7 @@ struct list_lru {
        struct list_head        list;
        int                     shrinker_id;
        bool                    memcg_aware;
-       /* protects ->mlrus->mlru[i] */
-       spinlock_t              lock;
-       /* for cgroup aware lrus points to per cgroup lists, otherwise NULL */
-       struct list_lru_memcg   __rcu *mlrus;
+       struct xarray           xa;
 #endif
 };
 
@@ -77,7 +69,6 @@ int __list_lru_init(struct list_lru *lru, bool memcg_aware,
 
 int memcg_list_lru_alloc(struct mem_cgroup *memcg, struct list_lru *lru,
                         gfp_t gfp);
-int memcg_update_all_list_lrus(int num_memcgs);
 void memcg_reparent_list_lrus(struct mem_cgroup *memcg, struct mem_cgroup *parent);
 
 /**