path: root/tools/testing/selftests/cgroup/cgroup_util.c
diff options
authorDavid Vernet <void@manifault.com>2022-05-12 20:22:57 -0700
committerAndrew Morton <akpm@linux-foundation.org>2022-05-13 07:20:12 -0700
commitcdc69458a5f3d4cf31372efd45fe92cec6b167e4 (patch)
tree6156a64cffc2c648dc67990b1759ba95563a37ae /tools/testing/selftests/cgroup/cgroup_util.c
parentcgroups: refactor children cgroups in memcg tests (diff)
cgroup: account for memory_recursiveprot in test_memcg_low()
The test_memcg_low() testcase in test_memcontrol.c verifies the expected behavior of groups using the memory.low knob. Part of the testcase verifies that a group with memory.low that experiences reclaim due to memory pressure elsewhere in the system, observes memory.events.low events as a result of that reclaim. In commit 8a931f801340 ("mm: memcontrol: recursive memory.low protection"), the memory controller was updated to propagate memory.low and memory.min protection from a parent group to its children via a configurable memory_recursiveprot mount option. This unfortunately broke the memcg tests, which asserts that a sibling that experienced reclaim but had a memory.low value of 0, would not observe any memory.low events. This patch updates test_memcg_low() to account for the new behavior introduced by memory_recursiveprot. So as to make the test resilient to multiple configurations, the patch also adds a new proc_mount_contains() helper that checks for a string in /proc/mounts, and is used to toggle behavior based on whether the default memory_recursiveprot was present. Link: https://lkml.kernel.org/r/20220423155619.3669555-3-void@manifault.com Signed-off-by: David Vernet <void@manifault.com> Acked-by: Roman Gushchin <roman.gushchin@linux.dev> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Michal Hocko <mhocko@kernel.org> Cc: Shakeel Butt <shakeelb@google.com> Cc: Tejun Heo <tj@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'tools/testing/selftests/cgroup/cgroup_util.c')
1 files changed, 12 insertions, 0 deletions
diff --git a/tools/testing/selftests/cgroup/cgroup_util.c b/tools/testing/selftests/cgroup/cgroup_util.c
index e6f3679cdcc0..b4d7027a44c3 100644
--- a/tools/testing/selftests/cgroup/cgroup_util.c
+++ b/tools/testing/selftests/cgroup/cgroup_util.c
@@ -528,6 +528,18 @@ int set_oom_adj_score(int pid, int score)
return 0;
+int proc_mount_contains(const char *option)
+ char buf[4 * PAGE_SIZE];
+ ssize_t read;
+ read = read_text("/proc/mounts", buf, sizeof(buf));
+ if (read < 0)
+ return read;
+ return strstr(buf, option) != NULL;
ssize_t proc_read_text(int pid, bool thread, const char *item, char *buf, size_t size)
char path[PATH_MAX];