new file mode 100755
@@ -0,0 +1,92 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2025 Oracle. All Rights Reserved.
+#
+# FS QA Test 329
+#
+# Verify sysfs knob input syntax.
+#
+. ./common/preamble
+_begin_fstest auto quick
+
+. ./common/filter
+
+# Modify as appropriate.
+_require_scratch
+_require_fs_sysfs read_policy
+
+_scratch_mkfs > /dev/null 2>&1 || _fail "mkfs failed"
+_scratch_mount
+
+set_sysfs_policy()
+{
+ local attr=$1
+ shift
+ local policy=$@
+
+ _set_fs_sysfs_attr $SCRATCH_DEV $attr ${policy}
+ _get_fs_sysfs_attr $SCRATCH_DEV $attr | grep -q "[${policy}]"
+ if [[ $? != 0 ]]; then
+ echo "Setting sysfs $attr $policy failed"
+ fi
+}
+
+set_sysfs_policy_must_fail()
+{
+ local attr=$1
+ shift
+ local policy=$@
+
+ _set_fs_sysfs_attr $SCRATCH_DEV $attr ${policy} | _filter_sysfs_error \
+ | _expect_error_invalid_argument | tee -a $seqres.full
+}
+
+verify_sysfs_syntax()
+{
+ local attr=$1
+ local policy=$2
+ local value=$3
+
+ # Test policy specified wrongly. Must fail.
+ set_sysfs_policy_must_fail $attr "'$policy $policy'"
+ set_sysfs_policy_must_fail $attr "'$policy t'"
+ set_sysfs_policy_must_fail $attr "' '"
+ set_sysfs_policy_must_fail $attr "'${policy} n'"
+ set_sysfs_policy_must_fail $attr "'n ${policy}'"
+ set_sysfs_policy_must_fail $attr "' ${policy}'"
+ set_sysfs_policy_must_fail $attr "' ${policy} '"
+ set_sysfs_policy_must_fail $attr "'${policy} '"
+ set_sysfs_policy_must_fail $attr _${policy}
+ set_sysfs_policy_must_fail $attr ${policy}_
+ set_sysfs_policy_must_fail $attr _${policy}_
+ set_sysfs_policy_must_fail $attr ${policy}:
+ # Test policy longer than 32 chars fails stable.
+ set_sysfs_policy_must_fail $attr 'jfdkkkkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjffjfjfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'
+
+ # Test policy specified correctly. Must pass.
+ set_sysfs_policy $attr $policy
+
+ # If the policy has no value return
+ if [[ -z $value ]]; then
+ return
+ fi
+
+ # Test value specified wrongly. Must fail.
+ set_sysfs_policy_must_fail $attr "'$policy: $value'"
+ set_sysfs_policy_must_fail $attr "'$policy:$value '"
+ set_sysfs_policy_must_fail $attr "'$policy:$value '"
+ set_sysfs_policy_must_fail $attr "'$policy: $value'"
+ set_sysfs_policy_must_fail $attr "'$policy :$value'"
+
+ # Test policy and value all specified correctly. Must pass.
+ set_sysfs_policy $attr $policy:$value
+}
+
+verify_sysfs_syntax read_policy pid
+verify_sysfs_syntax read_policy round-robin 4k
+verify_sysfs_syntax allocation/data/chunk_size 10g
+
+echo Silence is golden
+
+status=0
+exit
new file mode 100644
@@ -0,0 +1,2 @@
+QA output created by 329
+Silence is golden
Checks if the sysfs attribute sanitizes arguments and verifies input syntax. Signed-off-by: Anand Jain <anand.jain@oracle.com> --- tests/btrfs/329 | 92 +++++++++++++++++++++++++++++++++++++++++++++ tests/btrfs/329.out | 2 + 2 files changed, 94 insertions(+) create mode 100755 tests/btrfs/329 create mode 100644 tests/btrfs/329.out