All of lore.kernel.org
 help / color / mirror / Atom feed
From: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
To: ltp@lists.linux.it
Subject: [LTP] [PATCH v2] controllers: detect previous test failure on cgroup mounts
Date: Thu,  9 Sep 2021 15:33:14 +0200	[thread overview]
Message-ID: <20210909133314.30997-1-krzysztof.kozlowski@canonical.com> (raw)
Message-ID: <20210909133314.evGCJHveiCHme6KHwawEoKCBO6UL3kd14MI4maHdvJU@z> (raw)

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


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

             reply	other threads:[~2021-09-09 13:33 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-09 13:33 Krzysztof Kozlowski [this message]
2021-09-09 13:33 ` [LTP] [PATCH v2] controllers: detect previous test failure on cgroup mounts Krzysztof Kozlowski
2021-09-09 15:34   ` Cyril Hrubis
2021-09-09 15:34     ` Cyril Hrubis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210909133314.30997-1-krzysztof.kozlowski@canonical.com \
    --to=krzysztof.kozlowski@canonical.com \
    --cc=ltp@lists.linux.it \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.