[LTP] [PATCH 1/3] cpuset_regression_test: Convert to new api
Richard Palethorpe
rpalethorpe@suse.de
Mon Nov 15 10:23:21 CET 2021
Joerg Vehlow <lkml@jv-coder.de> writes:
> From: Joerg Vehlow <joerg.vehlow@aox-tech.de>
>
> Signed-off-by: Joerg Vehlow <joerg.vehlow@aox-tech.de>
Reviewed-by: Richard Palethorpe <rpalethorpe@suse.com>
> ---
> .../cpuset/cpuset_regression_test.sh | 147 +++++++-----------
> 1 file changed, 56 insertions(+), 91 deletions(-)
>
> diff --git a/testcases/kernel/controllers/cpuset/cpuset_regression_test.sh b/testcases/kernel/controllers/cpuset/cpuset_regression_test.sh
> index dccfd91cd..1dda19704 100755
> --- a/testcases/kernel/controllers/cpuset/cpuset_regression_test.sh
> +++ b/testcases/kernel/controllers/cpuset/cpuset_regression_test.sh
> @@ -1,82 +1,65 @@
> #!/bin/sh
> -#
> +# SPDX-License-Identifier: GPL-2.0-or-later
> # Copyright (c) 2015 Fujitsu Ltd.
> # Author: Zeng Linggang <zenglg.jy@cn.fujitsu.com>
> #
> -# This program is free software; you can redistribute it and/or modify
> -# it under the terms of the GNU General Public License as published by
> -# the Free Software Foundation; either version 2 of the License, or
> -# (at your option) any later version.
> -#
> -# This program is distributed in the hope that it will be useful,
> -# but WITHOUT ANY WARRANTY; without even the implied warranty of
> -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> -# GNU General Public License for more details.
> -#
> -# You should have received a copy of the GNU General Public License
> -# along with this program; if not, write to the Free Software
> -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
> -#
> # This is a regression test for commit:
> -# http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/
> -# ?id=bb2bc55
> +# http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=bb2bc55
> #
> +# A newly created cpuset group crashed the kernel, if exclusive was set to 1,
> +# before a cpuset was set.
> +
> +TST_SETUP=setup
> +TST_CLEANUP=cleanup
> +TST_TESTFUNC=test
> +TST_NEEDS_ROOT=1
> +TST_NEEDS_TMPDIR=1
> +TST_MIN_KVER="3.18"
> +
> +. cgroup_lib.sh
> +
> +LOCAL_MOUNTPOINT="cpuset_test"
>
> -TCID=cpuset_regression_test
> -TST_TOTAL=1
> -. test.sh
> +root_cpuset_dir=
> +cpu_exclusive="cpuset.cpu_exclusive"
> +cpus="cpuset.cpus"
> +old_cpu_exclusive_value=1
>
> setup()
> {
> - tst_require_root
> + local cpu_num
>
> - if tst_kvcmp -lt "3.18"; then
> - tst_brkm TCONF "Test must be run with kernel 3.18.0 or newer"
> - fi
> -
> - local cpu_num=$(tst_getconf _NPROCESSORS_ONLN)
> + cpu_num=$(tst_getconf _NPROCESSORS_ONLN)
> if [ $cpu_num -lt 2 ]; then
> - tst_brkm TCONF "We need 2 cpus at least to have test"
> + tst_brk TCONF "We need 2 cpus at least to have test"
> fi
>
> - tst_tmpdir
> -
> - TST_CLEANUP=cleanup
> + if ! is_cgroup_subsystem_available_and_enabled "cpuset"; then
> + tst_brk TCONF "Either kernel does not support cpuset controller or feature not enabled"
> + fi
>
> # We need to mount cpuset if it is not found.
> - mount_flag=0
> - grep -w cpuset /proc/mounts > tmpfile
> - if [ $? -eq 0 ]; then
> - root_cpuset_dir=$(cat tmpfile | awk '{print $2}')
> - else
> - root_cpuset_dir="cpuset_test"
> + root_cpuset_dir=$(get_cgroup_mountpoint cpuset)
> + if [ -z "$root_cpuset_dir" ]; then
> + root_cpuset_dir="$LOCAL_MOUNTPOINT"
>
> ROD_SILENT mkdir -p ${root_cpuset_dir}
> -
> ROD_SILENT mount -t cpuset cpuset ${root_cpuset_dir}
> -
> - mount_flag=1
> fi
>
> - if [ -f ${root_cpuset_dir}/cpuset.cpu_exclusive ]; then
> - cpu_exclusive=cpuset.cpu_exclusive
> - cpus=cpuset.cpus
> - elif [ -f ${root_cpuset_dir}/cpu_exclusive ]; then
> + if ! [ -f ${root_cpuset_dir}/${cpu_exclusive} ]; then
> cpu_exclusive=cpu_exclusive
> cpus=cpus
> - else
> - tst_brkm TBROK "Both cpuset.cpu_exclusive and cpu_exclusive" \
> - "do not exist."
> fi
>
> - cpu_exclusive_value=$(cat ${root_cpuset_dir}/${cpu_exclusive})
> - if [ "${cpu_exclusive_value}" != "1" ];then
> + if ! [ -f ${root_cpuset_dir}/${cpu_exclusive} ]; then
> + tst_brk TBROK "Both cpuset.cpu_exclusive and cpu_exclusive do not exist"
> + fi
> +
> + old_cpu_exclusive_value=$(cat ${root_cpuset_dir}/${cpu_exclusive})
> + if [ "${old_cpu_exclusive_value}" != "1" ];then
> echo 1 > ${root_cpuset_dir}/${cpu_exclusive}
> - if [ $? -ne 0 ]; then
> - tst_brkm TBROK "'echo 1 >" \
> - "${root_cpuset_dir}/${cpu_exclusive}'" \
> - "failed"
> - fi
> + [ $? -ne 0 ] && tst_brk TBROK "'echo 1 > ${root_cpuset_dir}/${cpu_exclusive}' failed"
> fi
> }
>
> @@ -86,65 +69,47 @@ cleanup()
> rmdir ${root_cpuset_dir}/testdir
> fi
>
> - if [ "$cpu_exclusive_value" != 1 ]; then
> - # Need to flush, or may be output:
> - # "write error: Device or resource busy"
> + if [ "$old_cpu_exclusive_value" != 1 ]; then
> + # Need to flush, or write may fail with: "Device or resource busy"
> sync
> -
> - echo ${cpu_exclusive_value} > \
> - ${root_cpuset_dir}/${cpu_exclusive}
> + echo ${old_cpu_exclusive_value} > ${root_cpuset_dir}/${cpu_exclusive}
> fi
>
> - if [ "${mount_flag}" = "1" ]; then
> - umount ${root_cpuset_dir}
> + if [ -d "$LOCAL_MOUNTPOINT" ]; then
> + umount ${LOCAL_MOUNTPOINT}
> if [ $? -ne 0 ]; then
> - tst_resm TWARN "'umount ${root_cpuset_dir}' failed"
> + tst_res TWARN "'umount ${LOCAL_MOUNTPOINT}' failed"
> fi
>
> - if [ -d "${root_cpuset_dir}" ]; then
> - rmdir ${root_cpuset_dir}
> - fi
> + rmdir ${LOCAL_MOUNTPOINT}
> fi
> -
> - tst_rmdir
> }
>
> -cpuset_test()
> +test()
> {
> + local cpu_exclusive_tmp cpus_value
> +
> ROD_SILENT mkdir ${root_cpuset_dir}/testdir
>
> # Creat an exclusive cpuset.
> echo 1 > ${root_cpuset_dir}/testdir/${cpu_exclusive}
> - if [ $? -ne 0 ]; then
> - tst_brkm TFAIL "'echo 1 >" \
> - "${root_cpuset_dir}/testdir/${cpu_exclusive}'" \
> - "failed"
> - fi
> -
> - local cpu_exclusive_tmp=$(cat \
> - ${root_cpuset_dir}/testdir/${cpu_exclusive})
> + [ $? -ne 0 ] && tst_brk TFAIL "'echo 1 > ${root_cpuset_dir}/testdir/${cpu_exclusive}' failed"
> +
> + cpu_exclusive_tmp=$(cat ${root_cpuset_dir}/testdir/${cpu_exclusive})
> if [ "${cpu_exclusive_tmp}" != "1" ]; then
> - tst_brkm TFAIL "${cpu_exclusive} is '${cpu_exclusive_tmp}'," \
> - "expected '1'"
> + tst_brk TFAIL "${cpu_exclusive} is '${cpu_exclusive_tmp}', expected '1'"
> fi
>
> - # ${cpus} is empty at the begin, that maybe make the system *crash*.
> + # This may trigger the kernel crash
> echo 0-1 > ${root_cpuset_dir}/testdir/${cpus}
> - if [ $? -ne 0 ]; then
> - tst_brkm TFAIL "'echo 0-1 >" \
> - "${root_cpuset_dir}/testdir/${cpus}' failed"
> - fi
> + [ $? -ne 0 ] && tst_brk TFAIL "'echo 0-1 > ${root_cpuset_dir}/testdir/${cpus}' failed"
>
> - local cpus_value=$(cat ${root_cpuset_dir}/testdir/${cpus})
> + cpus_value=$(cat ${root_cpuset_dir}/testdir/${cpus})
> if [ "${cpus_value}" != "0-1" ]; then
> - tst_brkm TFAIL "${cpus} is '${cpus_value}', expected '0-1'"
> + tst_brk TFAIL "${cpus} is '${cpus_value}', expected '0-1'"
> fi
>
> - tst_resm TPASS "Bug is not reproduced"
> + tst_res TPASS "Bug is not reproducible"
> }
>
> -setup
> -
> -cpuset_test
> -
> -tst_exit
> +tst_run
> --
> 2.25.1
--
Thank you,
Richard.
More information about the ltp
mailing list