selftests/mm: skip hugetlb cgroup v2 tests without the needed controllers

With -cgroup-v2, charge_reserved_hugetlb.sh and
hugetlb_reparenting_test.sh mount a cgroup2 hierarchy on a temporary
directory when none is mounted and enable the hugetlb controller
(hugetlb_reparenting_test.sh also enables memory) in its
cgroup.subtree_control.

On a system that still binds these controllers to cgroup v1, they are not
available in the new hierarchy.  Writing to cgroup.subtree_control fails
with ENOENT, "set -e" aborts the script, the test is reported as failed,
and the temporary cgroup2 mount is left behind.

Check cgroup.controllers first, and skip the test when a controller is
missing, after unmounting the hierarchy and removing the directory the
script created.

With hugetlb and memory bound to cgroup v1, per script:

                                before      after
  result                        fail        skip
  cgroup2 mounts left behind       1           0

Link: https://lore.kernel.org/20261016-bug-selftests-mm-hugetlb-cgroup2-skip-v1-1-7c78883a67b4@gmail.com
Fixes: 29750f71a9 ("hugetlb_cgroup: add hugetlb_cgroup reservation tests")
Signed-off-by: Qiliang Yuan <odys.yuan@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Reviewed-by: Joshua Hahn <joshua.hahnjy@gmail.com>
Cc: David Hildenbrand <david@kernel.org>
Cc: Lorenzo Stoakes <ljs@kernel.org>
Cc: Liam R. Howlett <liam@infradead.org>
Cc: Vlastimil Babka <vbabka@kernel.org>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Shuah Khan <shuah@kernel.org>
Cc: Mina Almasry <almasrymina@google.com>
Cc: Muchun Song <muchun.song@linux.dev>
Cc: Oscar Salvador <osalvador@suse.de>
This commit is contained in:
Qiliang Yuan 2026-10-16 20:54:48 +08:00 committed by Andrew Morton
parent c82dba3183
commit 8730e622bf
2 changed files with 18 additions and 0 deletions

View File

@ -39,6 +39,14 @@ if [[ $cgroup2 ]]; then
mount -t cgroup2 none $cgroup_path
do_umount=1
fi
if ! grep -qw hugetlb $cgroup_path/cgroup.controllers; then
echo "hugetlb controller not available in cgroup v2. Skipping..."
if [[ $do_umount ]]; then
umount $cgroup_path
rmdir $cgroup_path
fi
exit $ksft_skip
fi
echo "+hugetlb" >$cgroup_path/cgroup.subtree_control
else
cgroup_path=$(mount -t cgroup | grep ",hugetlb" | awk '{print $3}')

View File

@ -29,6 +29,16 @@ if [[ $cgroup2 ]]; then
mount -t cgroup2 none $CGROUP_ROOT
do_umount=1
fi
for ctrl in hugetlb memory; do
if ! grep -qw $ctrl $CGROUP_ROOT/cgroup.controllers; then
echo "$ctrl controller not available in cgroup v2. Skipping..."
if [[ $do_umount ]]; then
umount $CGROUP_ROOT
rmdir $CGROUP_ROOT
fi
exit $ksft_skip
fi
done
echo "+hugetlb +memory" >$CGROUP_ROOT/cgroup.subtree_control
else
CGROUP_ROOT=$(mount -t cgroup | grep ",hugetlb" | awk '{print $3}')