[LTP] [PATCH v2] controllers: detect previous test failure on cgroup mounts
Krzysztof Kozlowski
krzysztof.kozlowski@canonical.com
Thu Sep 9 15:33:14 CEST 2021
The failure of memcg_stress_test.sh cleanup went unnoticed (except
echo message) and caused further cgroup_fj and memcg_control_test
failures because of unclean cgroups. Flow is usually like:
1. memcg_stress_test succeeds but actually the /dev/memcg was not
cleaned up. Notice lack of any error message due to 2>/dev/null.
memcg_stress_test 1 TINFO: Testing 150 cgroups, using 1273 MB, interval 5
memcg_stress_test 1 TINFO: Starting cgroups
memcg_stress_test 1 TINFO: Testing cgroups for 900s
memcg_stress_test 1 TINFO: Killing groups
tag=memcg_stress stime=1626770787 dur=903 exit=exited stat=2 core=no cu=19 cs=12
2. memcg_control_test has false-positive. It succeeds but actually no
test was done due to /dev/memcg pollution from previous test:
mkdir: cannot create directory ‘/tmp/ltp-q8DjShPJeB/mnt/1’: File exists
memcg_control 0 TINFO : Test #1: Checking if the memory usage limit imposed by the topmost group is enforced
sh: echo: I/O error
/opt/ltp/testcases/bin/memcg_control_test.sh: 86: /opt/ltp/testcases/bin/memcg_control_test.sh: cannot create /tmp/ltp-q8DjShPJeB/mnt/1/memory.memsw.limit_in_bytes:
Permission denied
rmdir: failed to remove 'sub': Device or resource busy
rmdir: failed to remove '/tmp/ltp-q8DjShPJeB/mnt/1': Device or resource busy
memcg_control 1 TPASS : memcg_control: passed
tag=memcg_control stime=1626771695 dur=6 exit=exited stat=0 core=no cu=2 cs=1
3. cgroup_fj_function2_memory fails with a cryptic message of mounting a
path with new line (because /dev/memcg was not cleaned up before):
cgroup_fj_function2_memory 1 TINFO: Subsystem memory is mounted at /sys/fs/cgroup/memory
/dev/memcg
mkdir: cannot create directory ‘/sys/fs/cgroup/memory’: File exists
cgroup_fj_function2_memory 1 TBROK: mkdir /sys/fs/cgroup/memory
/dev/memcg/ltp failed
cgroup_fj_function2_memory 1 TINFO: Removing all ltp subgroups...
find: ‘/sys/fs/cgroup/memory\n/dev/memcg/ltp/’: No such file or directory
The actual failure was in memcg_stress_test executed before other tests,
however it went unnoticed. Debugging such failures is difficult as
result of failing test depends on running another which did not report a
failure. Instead, detect unclean cgroups mounts and explicitly test it.
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
---
Changes since v1:
1. Do not modify control/memcg_control_test.sh as it does not seem
ready.
---
.../kernel/controllers/cgroup_fj/cgroup_fj_common.sh | 4 ++--
.../kernel/controllers/memcg/stress/memcg_stress_test.sh | 8 ++++----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/testcases/kernel/controllers/cgroup_fj/cgroup_fj_common.sh b/testcases/kernel/controllers/cgroup_fj/cgroup_fj_common.sh
index 5594fe9de426..53ab637e8910 100755
--- a/testcases/kernel/controllers/cgroup_fj/cgroup_fj_common.sh
+++ b/testcases/kernel/controllers/cgroup_fj/cgroup_fj_common.sh
@@ -123,10 +123,10 @@ cleanup()
fi
if grep -q "$mount_point" /proc/mounts; then
- umount "$mount_point"
+ EXPECT_PASS umount "$mount_point"
fi
if [ -e "$mount_point" ]; then
- rmdir "$mount_point"
+ EXPECT_PASS rmdir "$mount_point"
fi
}
diff --git a/testcases/kernel/controllers/memcg/stress/memcg_stress_test.sh b/testcases/kernel/controllers/memcg/stress/memcg_stress_test.sh
index c2501e164018..8f7a0eb9dc37 100755
--- a/testcases/kernel/controllers/memcg/stress/memcg_stress_test.sh
+++ b/testcases/kernel/controllers/memcg/stress/memcg_stress_test.sh
@@ -44,8 +44,8 @@ setup()
cleanup()
{
if [ -e /dev/memcg ]; then
- umount /dev/memcg 2> /dev/null
- rmdir /dev/memcg 2> /dev/null
+ EXPECT_PASS umount /dev/memcg
+ EXPECT_PASS rmdir /dev/memcg
fi
}
@@ -53,8 +53,8 @@ do_mount()
{
cleanup
- mkdir /dev/memcg 2> /dev/null
- mount -t cgroup -omemory memcg /dev/memcg
+ EXPECT_PASS mkdir /dev/memcg
+ EXPECT_PASS mount -t cgroup -omemory memcg /dev/memcg
}
# $1 Number of cgroups
--
2.30.2
More information about the ltp
mailing list