From: Nhat Pham nphamcs@gmail.com
mainline inclusion from mainline-v6.8-rc1 commit fdc4161ff6a5e96222e159c1f1b28d31a985130d category: feature bugzilla: https://gitee.com/openeuler/kernel/issues/I8ZUJQ CVE: NA
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?i...
--------------------------------
This patch implements a helper function that try to get a reference to an memcg's css, as well as checking if it is online. This new function is almost exactly the same as the existing mem_cgroup_tryget(), except for the onlineness check. In the !CONFIG_MEMCG case, it always returns true, analogous to mem_cgroup_tryget(). This is useful for e.g to the new zswap writeback scheme, where we need to select the next online memcg as a candidate for the global limit reclaim.
Link: https://lkml.kernel.org/r/20231130194023.4102148-3-nphamcs@gmail.com Signed-off-by: Nhat Pham nphamcs@gmail.com Tested-by: Bagas Sanjaya bagasdotme@gmail.com Reviewed-by: Yosry Ahmed yosryahmed@google.com Cc: Chris Li chrisl@kernel.org Cc: Dan Streetman ddstreet@ieee.org Cc: Domenico Cerasuolo cerasuolodomenico@gmail.com Cc: Johannes Weiner hannes@cmpxchg.org Cc: Michal Hocko mhocko@kernel.org Cc: Muchun Song muchun.song@linux.dev Cc: Roman Gushchin roman.gushchin@linux.dev Cc: Seth Jennings sjenning@redhat.com Cc: Shakeel Butt shakeelb@google.com Cc: Shuah Khan shuah@kernel.org Cc: Vitaly Wool vitaly.wool@konsulko.com Signed-off-by: Andrew Morton akpm@linux-foundation.org Signed-off-by: Ma Wupeng mawupeng1@huawei.com --- include/linux/memcontrol.h | 10 ++++++++++ 1 file changed, 10 insertions(+)
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 649fbb5c1adc5..b0ee904aa1b5b 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -873,6 +873,11 @@ static inline bool mem_cgroup_tryget(struct mem_cgroup *memcg) return !memcg || css_tryget(&memcg->css); }
+static inline bool mem_cgroup_tryget_online(struct mem_cgroup *memcg) +{ + return !memcg || css_tryget_online(&memcg->css); +} + static inline void mem_cgroup_put(struct mem_cgroup *memcg) { if (memcg) @@ -1404,6 +1409,11 @@ static inline bool mem_cgroup_tryget(struct mem_cgroup *memcg) return true; }
+static inline bool mem_cgroup_tryget_online(struct mem_cgroup *memcg) +{ + return true; +} + static inline void mem_cgroup_put(struct mem_cgroup *memcg) { }