From: "Darrick J. Wong" <djwong@kernel.org>
To: Anand Jain <anand.jain@oracle.com>
Cc: fstests@vger.kernel.org, linux-btrfs@vger.kernel.org, zlang@redhat.com
Subject: Re: [PATCH v5 4/6] fstests: common/sysfs: add new file sysfs and helpers
Date: Mon, 7 Apr 2025 10:22:49 -0700 [thread overview]
Message-ID: <20250407172249.GA6274@frogsfrogsfrogs> (raw)
In-Reply-To: <ae857de1a41a1b2946c6ca83165308a13c043bba.1743996408.git.anand.jain@oracle.com>
On Mon, Apr 07, 2025 at 11:48:18AM +0800, Anand Jain wrote:
> Introduce `verify_sysfs_syntax()` and `_require_fs_sysfs_attr_policy()`
> to verify whether a sysfs attribute rejects invalid input arguments
> during writes.
>
> Signed-off-by: Anand Jain <anand.jain@oracle.com>
> ---
> common/sysfs | 141 +++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 141 insertions(+)
> create mode 100644 common/sysfs
>
> diff --git a/common/sysfs b/common/sysfs
> new file mode 100644
> index 000000000000..9f2d77c6b1f5
> --- /dev/null
> +++ b/common/sysfs
> @@ -0,0 +1,141 @@
> +##/bin/bash
> +# SPDX-License-Identifier: GPL-2.0+
> +# Copyright (c) 2025 Oracle. All Rights Reserved.
> +#
> +# Common/sysfs file for the sysfs related helper functions.
> +
> +# Test for the existence of a policy at /sys/fs/$FSTYP/$DEV/$ATTR
> +#
> +# All arguments are necessary, and in this order:
> +# - dev: device name, e.g. $SCRATCH_DEV
> +# - attr: path name under /sys/fs/$FSTYP/$dev
> +# - policy: policy within /sys/fs/$FSTYP/$dev
> +#
> +# Usage example:
> +# _has_fs_sysfs_attr_policy /dev/mapper/scratch-dev read_policy round-robin
> +_has_fs_sysfs_attr_policy()
> +{
> + local dev=$1
> + local attr=$2
> + local policy=$3
> +
> + if [ ! -b "$dev" -o -z "$attr" -o -z "$policy" ]; then
> + _fail \
> + "Usage: _has_fs_sysfs_attr_policy <mounted_device> <attr> <policy>"
> + fi
Shouldn't this return 1 if the parameters are not fully specified?
> +
> + local dname=$(_fs_sysfs_dname $dev)
> + test -e /sys/fs/${FSTYP}/${dname}/${attr}
What is the point of testing path existence here if the function doesn't
actually change its behavior?
> +
> + cat /sys/fs/${FSTYP}/${dname}/${attr} | grep -q ${policy}
> +}
> +
> +# Require the existence of a sysfs entry at /sys/fs/$FSTYP/$DEV/$ATTR
> +# and value in it contains $policy
> +# All arguments are necessary, and in this order:
> +# - dev: device name, e.g. $SCRATCH_DEV
> +# - attr: path name under /sys/fs/$FSTYP/$dev
> +# - policy: mentioned in /sys/fs/$FSTYP/$dev/$attr
> +#
> +# Usage example:
> +# _require_fs_sysfs_attr_policy /dev/mapper/scratch-dev read_policy round-robin
> +_require_fs_sysfs_attr_policy()
> +{
> + _has_fs_sysfs_attr_policy "$@" && return
> +
> + local dev=$1
> + local attr=$2
> + local policy=$3
> + local dname=$(_fs_sysfs_dname $dev)
> +
> + _notrun "This test requires /sys/fs/${FSTYP}/${dname}/${attr} ${policy}"
> +}
> +
> +_set_sysfs_policy()
> +{
> + local dev=$1
> + local attr=$2
> + shift
> + shift
> + local policy=$@
> +
> + _set_fs_sysfs_attr $dev $attr ${policy}
> +
> + case "$FSTYP" in
> + btrfs)
> + _get_fs_sysfs_attr $dev $attr | grep -q "[${policy}]"
> + if [[ $? != 0 ]]; then
> + echo "Setting sysfs $attr $policy failed"
> + fi
> + ;;
> + *)
> + _fail \
> +"sysfs syntax verification for '${attr}' '${policy}' for '${FSTYP}' is not implemented"
> + ;;
> + esac
> +}
> +
> +_set_sysfs_policy_must_fail()
> +{
> + local dev=$1
> + local attr=$2
> + shift
> + shift
> + local policy=$@
> +
> + _set_fs_sysfs_attr $dev $attr ${policy} | _filter_sysfs_error \
> + | tee -a $seqres.full
> +}
> +
> +# Verify sysfs attribute rejects invalid input.
> +# Usage syntax:
> +# _verify_sysfs_syntax <$dev> <$attr> <$policy> [$value]
> +# Examples:
> +# _verify_sysfs_syntax $TEST_DEV read_policy pid
> +# _verify_sysfs_syntax $TEST_DEV read_policy round-robin 4k
> +# Note:
> +# Process must call . ./common/filter
> +_verify_sysfs_syntax()
> +{
> + local dev=$1
> + local attr=$2
> + local policy=$3
> + local value=$4
> +
> + # Do this in the test case so that we know its prerequisites.
> + # '_require_fs_sysfs_attr_policy $TEST_DEV $attr $policy'
But it's commented out ... ?
--D
> +
> + # Test policy specified wrongly. Must fail.
> + _set_sysfs_policy_must_fail $dev $attr "'$policy $policy'"
> + _set_sysfs_policy_must_fail $dev $attr "'$policy t'"
> + _set_sysfs_policy_must_fail $dev $attr "' '"
> + _set_sysfs_policy_must_fail $dev $attr "'${policy} n'"
> + _set_sysfs_policy_must_fail $dev $attr "'n ${policy}'"
> + _set_sysfs_policy_must_fail $dev $attr "' ${policy}'"
> + _set_sysfs_policy_must_fail $dev $attr "' ${policy} '"
> + _set_sysfs_policy_must_fail $dev $attr "'${policy} '"
> + _set_sysfs_policy_must_fail $dev $attr _${policy}
> + _set_sysfs_policy_must_fail $dev $attr ${policy}_
> + _set_sysfs_policy_must_fail $dev $attr _${policy}_
> + _set_sysfs_policy_must_fail $dev $attr ${policy}:
> + # Test policy longer than 32 chars fails stable.
> + _set_sysfs_policy_must_fail $dev $attr 'jfdkkkkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjffjfjfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'
> +
> + # Test policy specified correctly. Must pass.
> + _set_sysfs_policy $dev $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 $dev $attr "'$policy: $value'"
> + _set_sysfs_policy_must_fail $dev $attr "'$policy:$value '"
> + _set_sysfs_policy_must_fail $dev $attr "'$policy:$value typo'"
> + _set_sysfs_policy_must_fail $dev $attr "'$policy:${value}typo'"
> + _set_sysfs_policy_must_fail $dev $attr "'$policy :$value'"
> +
> + # Test policy and value all specified correctly. Must pass.
> + _set_sysfs_policy $dev $attr $policy:$value
> +}
> --
> 2.47.0
>
>
next prev parent reply other threads:[~2025-04-07 17:22 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-07 3:48 [PATCH v5 0/6] fstests: btrfs: add test case to validate sysfs input arguments Anand Jain
2025-04-07 3:48 ` [PATCH v5 1/6] fstests: common/rc: set_fs_sysfs_attr: redirect errors to stdout Anand Jain
2025-04-07 3:48 ` [PATCH v5 2/6] fstests: common/rc: fix unset seqres in _set_fs_sysfs_attr Anand Jain
2025-04-07 16:58 ` Darrick J. Wong
2025-04-08 15:10 ` Anand Jain
2025-04-08 16:10 ` Darrick J. Wong
2025-04-07 3:48 ` [PATCH v5 3/6] fstests: filter: helper for sysfs error filtering Anand Jain
2025-04-07 3:48 ` [PATCH v5 4/6] fstests: common/sysfs: add new file sysfs and helpers Anand Jain
2025-04-07 17:22 ` Darrick J. Wong [this message]
2025-04-08 16:05 ` Anand Jain
2025-04-08 16:11 ` Darrick J. Wong
2025-04-07 3:48 ` [PATCH v5 5/6] fstests: btrfs: testcase for sysfs policy syntax verification Anand Jain
2025-04-07 3:48 ` [PATCH v5 6/6] fstests: btrfs: testcase for sysfs chunk_size attribute validation Anand Jain
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=20250407172249.GA6274@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=anand.jain@oracle.com \
--cc=fstests@vger.kernel.org \
--cc=linux-btrfs@vger.kernel.org \
--cc=zlang@redhat.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox