Files
android_kernel_xiaomi_sm8450/include/linux
Vladimir Davydov 60d3fd32a7 list_lru: introduce per-memcg lists
There are several FS shrinkers, including super_block::s_shrink, that
keep reclaimable objects in the list_lru structure.  Hence to turn them
to memcg-aware shrinkers, it is enough to make list_lru per-memcg.

This patch does the trick.  It adds an array of lru lists to the
list_lru_node structure (per-node part of the list_lru), one for each
kmem-active memcg, and dispatches every item addition or removal to the
list corresponding to the memcg which the item is accounted to.  So now
the list_lru structure is not just per node, but per node and per memcg.

Not all list_lrus need this feature, so this patch also adds a new
method, list_lru_init_memcg, which initializes a list_lru as memcg
aware.  Otherwise (i.e.  if initialized with old list_lru_init), the
list_lru won't have per memcg lists.

Just like per memcg caches arrays, the arrays of per-memcg lists are
indexed by memcg_cache_id, so we must grow them whenever
memcg_nr_cache_ids is increased.  So we introduce a callback,
memcg_update_all_list_lrus, invoked by memcg_alloc_cache_id if the id
space is full.

The locking is implemented in a manner similar to lruvecs, i.e.  we have
one lock per node that protects all lists (both global and per cgroup) on
the node.

Signed-off-by: Vladimir Davydov <vdavydov@parallels.com>
Cc: Dave Chinner <david@fromorbit.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Michal Hocko <mhocko@suse.cz>
Cc: Greg Thelen <gthelen@google.com>
Cc: Glauber Costa <glommer@gmail.com>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: Christoph Lameter <cl@linux.com>
Cc: Pekka Enberg <penberg@kernel.org>
Cc: David Rientjes <rientjes@google.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Tejun Heo <tj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2015-02-12 18:54:09 -08:00
..
2014-09-22 16:48:47 +09:00
2014-12-02 16:20:59 -08:00
2014-11-24 17:24:08 -05:00
2014-12-15 18:19:03 -08:00
2014-11-25 20:11:12 -08:00
2015-01-29 10:49:28 +02:00
2014-12-18 19:08:10 -08:00
2014-12-19 22:55:06 +01:00
2014-07-08 13:36:52 -07:00
2015-01-21 19:21:30 +01:00
2014-11-10 09:27:30 -07:00
2014-11-04 17:34:15 -08:00
2014-12-31 13:06:50 -05:00
2014-10-09 11:35:48 +03:00
2014-10-08 16:01:41 -04:00
2014-08-07 14:40:08 -04:00
2014-08-06 18:01:24 -07:00
2015-01-27 11:09:13 +01:00
2014-09-29 15:37:01 -04:00
2015-01-15 10:34:54 +01:00
2015-01-15 10:34:54 +01:00
2014-07-22 21:55:45 +01:00
2014-12-18 09:39:51 +01:00
2015-02-12 18:54:09 -08:00
2015-01-04 23:11:43 -05:00
2015-02-12 18:54:09 -08:00
2014-10-09 22:25:58 -04:00
2015-02-11 17:06:02 -08:00
2014-10-24 00:14:36 +02:00
2014-11-04 13:18:52 -07:00
2014-11-04 13:29:38 +00:00
2014-07-09 14:58:37 +01:00
2015-01-06 11:01:13 -08:00
2014-08-08 15:57:26 -07:00
2014-08-08 15:57:31 -07:00
2015-01-22 15:10:56 +01:00
2015-01-03 14:32:57 -05:00
2014-06-12 00:21:11 -04:00
2014-08-08 15:57:24 -07:00
2014-11-06 14:57:27 -08:00
2014-09-23 21:40:48 -07:00
2014-11-28 16:08:16 +01:00
2014-09-16 15:02:55 -06:00
2014-12-09 12:05:24 +02:00
2014-12-15 23:49:28 +02:00