[LTP] [PATCH] controllers/cpuset_base_ops_testset.sh: Accept either 0 or -EINVAL when passing '0-'

Xiao Yang yangx.jy@cn.fujitsu.com
Tue Sep 29 04:56:06 CEST 2020


When we write '0-' to cpuset.cpus/cpuset.mems, new bitmap_parselist()
in kernel(e.g. newer than v4.2) treats it as an invalid value and old
one treats it as a valid '0':
-------------------------------------------
on v5.8.0:
 # echo 0- > cpuset.cpus
 -bash: echo: write error: Invalid argument
 # echo 0- > cpuset.mems
 -bash: echo: write error: Invalid argument

on v4.0.0:
 # echo '0-' >cpuset.cpus
 # cat cpuset.cpus
 0
 # echo '0-' >cpuset.mems
 # cat cpuset.cpus
 0
-------------------------------------------
Note: commit d9282cb66353b changes the behavior.

Drop the check of kernel version and accept either 0 or -EINVAL
because the change of behavior can be backported into old kernel.

Fixes: #695
Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
---

Hi Cyril, Petr, Jan, Li

Do you think it is better to remove '0-' subtest directly?

 .../cpuset_base_ops_testset.sh                | 47 ++++++++-----------
 1 file changed, 20 insertions(+), 27 deletions(-)

diff --git a/testcases/kernel/controllers/cpuset/cpuset_base_ops_test/cpuset_base_ops_testset.sh b/testcases/kernel/controllers/cpuset/cpuset_base_ops_test/cpuset_base_ops_testset.sh
index 67f3611d7..1fa40d2d9 100755
--- a/testcases/kernel/controllers/cpuset/cpuset_base_ops_test/cpuset_base_ops_testset.sh
+++ b/testcases/kernel/controllers/cpuset/cpuset_base_ops_test/cpuset_base_ops_testset.sh
@@ -45,7 +45,7 @@ base_op_write_and_test()
 {
 	local write_file="$1"
 	local write_string="$2"
-	local expect_string="$3"
+	local expect_strings="$3"
 	local write_result=
 	local ret=0
 
@@ -59,24 +59,27 @@ base_op_write_and_test()
 	ret=$?
 	write_result="$(cat "$write_file")"
 
-	case "$expect_string" in
-	EMPTY)
-		test -z "$write_result" -a $ret = 0
-		ret=$?
-		;;
-	WRITE_ERROR)
-		ret=$((!$ret))
-		;;
-	*)
-		test "$expect_string" = "$write_result" -a $ret = 0
-		ret=$?
-		;;
-	esac
+	for expect_string in $(echo $expect_strings | sed 's/|/ /'); do
+		case "$expect_string" in
+		EMPTY)
+			test -z "$write_result" -a $ret = 0
+			ret=$?
+			;;
+		WRITE_ERROR)
+			ret=$((!$ret))
+			;;
+		*)
+			test "$expect_string" = "$write_result" -a $ret = 0
+			ret=$?
+			;;
+		esac
+		[ $ret -eq 0 ] && break
+	done
 
 	if [ $ret -eq 0 ]; then
 		tst_resm TPASS "$cfile_name: Get the expected string"
 	else
-		tst_resm TFAIL "$cfile_name: Test result - $write_result Expected string - \"$expect_string\""
+		tst_resm TFAIL "$cfile_name: Test result - $write_result Expected string - \"$expect_strings\""
 	fi
 	return $ret
 }
@@ -114,6 +117,7 @@ test_cpus()
 		${cpus_all}$nr_cpus			WRITE_ERROR
 		0,0					0
 		0-0					0
+		0-					0|WRITE_ERROR
 		0-$((nr_cpus-1))			0-$((nr_cpus-1))
 		-1					WRITE_ERROR
 		0-$nr_cpus				WRITE_ERROR
@@ -127,12 +131,6 @@ test_cpus()
 		base_op_test "$CPUSET/1/cpuset.cpus" "0,1-$((nr_cpus-2)),$((nr_cpus-1))" "0-$((nr_cpus-1))"
 		base_op_test "$CPUSET/1/cpuset.cpus" "0,1-$((nr_cpus-2))," "0-$((nr_cpus-2))"
 	fi
-
-	if tst_kvcmp -lt "3.0 RHEL6:2.6.32"; then
-		base_op_test "$CPUSET/1/cpuset.cpus" "0-" "WRITE_ERROR"
-	else
-		base_op_test "$CPUSET/1/cpuset.cpus" "0-" "0"
-	fi
 }
 
 test_mems()
@@ -149,6 +147,7 @@ test_mems()
 		${mems_all}$nr_mems			WRITE_ERROR
 		0,0					0
 		0-0					0
+		0-					0|WRITE_ERROR
 		0-$((nr_mems-1))			0-$((nr_mems-1))
 		-1					WRITE_ERROR
 		0-$nr_mems				WRITE_ERROR
@@ -162,12 +161,6 @@ test_mems()
 		base_op_test "$CPUSET/1/cpuset.mems" "0,1-$((nr_mems-2)),$((nr_mems-1))" "0-$((nr_mems-1))"
 		base_op_test "$CPUSET/1/cpuset.mems" "0,1-$((nr_mems-2))," "0-$((nr_mems-2))"
 	fi
-
-	if tst_kvcmp -lt "3.0 RHEL6:2.6.32"; then
-		base_op_test "$CPUSET/1/cpuset.mems" "0-" "WRITE_ERROR"
-	else
-		base_op_test "$CPUSET/1/cpuset.mems" "0-" "0"
-	fi
 }
 
 test_flags()
-- 
2.25.1





More information about the ltp mailing list