Split _have_kernel_option() into _have_kernel_config_file() and _check_kernel_option(). 1) _have_kernel_config_file() will set SKIP_REASON when neither /boot/config* nor /proc/config.gz is available. 2) _check_kernel_option() will not set SKIP_RESAON when the specified kernel option is not defined. Signed-off-by: Xiao Yang <yangx.jy@xxxxxxxxxxx> --- common/multipath-over-rdma | 3 ++- common/rc | 13 ++++++++----- tests/nvme/033 | 7 ++++++- tests/nvme/034 | 8 +++++++- tests/nvme/035 | 8 +++++++- tests/nvme/036 | 7 ++++++- tests/nvme/037 | 7 ++++++- tests/nvme/039 | 16 ++++++++++++---- tests/nvmeof-mp/rc | 11 ++++++----- tests/srp/rc | 6 +++++- tests/zbd/rc | 9 +++++++-- 11 files changed, 72 insertions(+), 23 deletions(-) diff --git a/common/multipath-over-rdma b/common/multipath-over-rdma index f9d7b9a..8a2108f 100644 --- a/common/multipath-over-rdma +++ b/common/multipath-over-rdma @@ -19,7 +19,8 @@ if [ $ramdisk_size -gt $max_ramdisk_size ]; then fi _have_legacy_dm() { - if ! _have_kernel_option DM_MQ_DEFAULT; then + _have_kernel_config_file || return + if ! _check_kernel_option DM_MQ_DEFAULT; then SKIP_REASON="legacy device mapper support is missing" return 1 fi diff --git a/common/rc b/common/rc index d18144b..df9fcb3 100644 --- a/common/rc +++ b/common/rc @@ -149,19 +149,22 @@ _have_configfs() { return 0 } -_have_kernel_option() { - local f opt=$1 - +_have_kernel_config_file() { if [[ ! -f /proc/config.gz && ! -f /boot/config-$(uname -r) ]]; then SKIP_REASON="kernel $(uname -r) config not found" return 1 fi + + return 0 +} + +_check_kernel_option() { + local f opt=$1 + for f in /proc/config.gz /boot/config-$(uname -r); do [ -e "$f" ] || continue if zgrep -q "^CONFIG_${opt}=[my]$" "$f"; then return 0 - else - SKIP_REASON="kernel option $opt has not been enabled" fi done diff --git a/tests/nvme/033 b/tests/nvme/033 index 90aee81..0f58227 100755 --- a/tests/nvme/033 +++ b/tests/nvme/033 @@ -10,7 +10,12 @@ QUICK=1 requires() { _nvme_requires - _have_kernel_option NVME_TARGET_PASSTHRU + + _have_kernel_config_file || return + if ! _check_kernel_option NVME_TARGET_PASSTHRU; then + SKIP_REASON="NVME_TARGET_PASSTHRU has not been enabled" + return 1 + fi } nvme_info() { diff --git a/tests/nvme/034 b/tests/nvme/034 index f92e5e2..552c204 100755 --- a/tests/nvme/034 +++ b/tests/nvme/034 @@ -10,7 +10,13 @@ TIMED=1 requires() { _nvme_requires - _have_kernel_option NVME_TARGET_PASSTHRU + + _have_kernel_config_file || return + if ! _check_kernel_option NVME_TARGET_PASSTHRU; then + SKIP_REASON="NVME_TARGET_PASSTHRU has not been enabled" + return 1 + fi + _have_fio } diff --git a/tests/nvme/035 b/tests/nvme/035 index ee78a75..8581e0c 100755 --- a/tests/nvme/035 +++ b/tests/nvme/035 @@ -11,7 +11,13 @@ TIMED=1 requires() { _nvme_requires - _have_kernel_option NVME_TARGET_PASSTHRU + + _have_kernel_config_file || return + if ! _check_kernel_option NVME_TARGET_PASSTHRU; then + SKIP_REASON="NVME_TARGET_PASSTHRU has not been enabled" + return 1 + fi + _have_xfs _have_fio } diff --git a/tests/nvme/036 b/tests/nvme/036 index 8218c65..c747489 100755 --- a/tests/nvme/036 +++ b/tests/nvme/036 @@ -10,7 +10,12 @@ QUICK=1 requires() { _nvme_requires - _have_kernel_option NVME_TARGET_PASSTHRU + + _have_kernel_config_file || return + if ! _check_kernel_option NVME_TARGET_PASSTHRU; then + SKIP_REASON="NVME_TARGET_PASSTHRU has not been enabled" + return 1 + fi } test_device() { diff --git a/tests/nvme/037 b/tests/nvme/037 index fc6c213..92cff7f 100755 --- a/tests/nvme/037 +++ b/tests/nvme/037 @@ -9,7 +9,12 @@ DESCRIPTION="test deletion of NVMeOF passthru controllers immediately after setu requires() { _nvme_requires - _have_kernel_option NVME_TARGET_PASSTHRU + + _have_kernel_config_file || return + if ! _check_kernel_option NVME_TARGET_PASSTHRU; then + SKIP_REASON="NVME_TARGET_PASSTHRU has not been enabled" + return 1 + fi } test_device() { diff --git a/tests/nvme/039 b/tests/nvme/039 index 85827fa..00c6672 100755 --- a/tests/nvme/039 +++ b/tests/nvme/039 @@ -14,8 +14,17 @@ QUICK=1 requires() { _have_program nvme - _have_kernel_option FAULT_INJECTION && \ - _have_kernel_option FAULT_INJECTION_DEBUG_FS + + _have_kernel_config_file || return + if ! _check_kernel_option FAULT_INJECTION; then + SKIP_REASON="FAULT_INJECTION has not been enabled" + return 1 + fi + + if ! _check_kernel_option FAULT_INJECTION_DEBUG_FS; then + SKIP_REASON="FAULT_INJECTION_DEBUG_FS has not been enabled" + return 1 + fi } inject_unrec_read_on_read() @@ -128,10 +137,9 @@ test_device() { echo "Running ${TEST_NAME}" - if _have_kernel_option NVME_VERBOSE_ERRORS; then + if _check_kernel_option NVME_VERBOSE_ERRORS; then nvme_verbose_errors=true else - unset SKIP_REASON nvme_verbose_errors=false fi diff --git a/tests/nvmeof-mp/rc b/tests/nvmeof-mp/rc index 708196b..ea48c33 100755 --- a/tests/nvmeof-mp/rc +++ b/tests/nvmeof-mp/rc @@ -14,19 +14,17 @@ ini_timeout=1 group_requires() { local m name p required_modules + _have_kernel_config_file || return # Since the nvmeof-mp tests are based on the dm-mpath driver, these # tests are incompatible with the NVME_MULTIPATH kernel configuration # option with multipathing enabled in the nvme_core kernel module. - if _have_kernel_option NVME_MULTIPATH && \ + if _check_kernel_option NVME_MULTIPATH && \ _have_module_param_value nvme_core multipath Y; then SKIP_REASON="CONFIG_NVME_MULTIPATH has been set in .config \ and multipathing has been enabled in the nvme_core kernel module" return fi - # Avoid test skip due to SKIP_REASON set by _have_kernel_option(). - unset SKIP_REASON - _have_configfs || return required_modules=( dm_multipath @@ -53,7 +51,10 @@ and multipathing has been enabled in the nvme_core kernel module" _have_root || return - _have_kernel_option DM_UEVENT || return + if ! _check_kernel_option DM_UEVENT; then + SKIP_REASON="DM_UEVENT has not been enabled" + return 1 + fi # shellcheck disable=SC2043 for name in multipathd; do diff --git a/tests/srp/rc b/tests/srp/rc index d44082a..38539cb 100755 --- a/tests/srp/rc +++ b/tests/srp/rc @@ -70,7 +70,11 @@ group_requires() { _have_src_program discontiguous-io || return - _have_kernel_option DM_UEVENT || return + _have_kernel_config_file || return + if ! _check_kernel_option DM_UEVENT; then + SKIP_REASON="DM_UEVENT has not been enabled" + return 1 + fi for name in srp_daemon multipathd; do if pidof "$name" >/dev/null; then diff --git a/tests/zbd/rc b/tests/zbd/rc index fea55d6..410e528 100644 --- a/tests/zbd/rc +++ b/tests/zbd/rc @@ -12,9 +12,14 @@ # group_requires() { + _have_kernel_config_file || return + if ! _check_kernel_option BLK_DEV_ZONED; then + SKIP_REASON="BLK_DEV_ZONED has not been enabled" + return 1 + fi + _have_root && _have_program blkzone && _have_program dd && - _have_kernel_option BLK_DEV_ZONED && _have_null_blk && - _have_module_param null_blk zoned + _have_null_blk && _have_module_param null_blk zoned } group_device_requires() { -- 2.34.1