1) _have_kernel_config_file() sets SKIP_REASON when neither /boot/config* nor /proc/config.gz is available. 2) _check_kernel_option() doesn't set SKIP_RESAON when the specified kernel option is not defined. 3) _have_kernel_option() combines _have_kernel_config_file() and _check_kernel_option() and then sets SKIP_RESAON when _check_kernel_option() returns false. Signed-off-by: Xiao Yang <yangx.jy@xxxxxxxxxxx> --- common/multipath-over-rdma | 3 ++- common/rc | 29 ++++++++++++++++++++++++----- tests/nvme/039 | 3 +-- tests/nvmeof-mp/rc | 6 ++---- 4 files changed, 29 insertions(+), 12 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..bf6cd10 100644 --- a/common/rc +++ b/common/rc @@ -149,25 +149,44 @@ _have_configfs() { return 0 } -_have_kernel_option() { - local f opt=$1 - +# Check if the specified kernel config files are available. +_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 if the specified kernel option is defined. +_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 return 1 } +# Combine _have_kernel_config_file() and _check_kernel_option(). +# Set SKIP_RESAON when _check_kernel_option() returns false. +_have_kernel_option() { + local opt=$1 + + _have_kernel_config_file || return + if ! _check_kernel_option "$opt"; then + SKIP_REASON="kernel option $opt has not been enabled" + return 1 + fi + + return 0 +} + # Check whether the version of the running kernel is greater than or equal to # $1.$2.$3 _have_kver() { diff --git a/tests/nvme/039 b/tests/nvme/039 index 85827fa..e175055 100755 --- a/tests/nvme/039 +++ b/tests/nvme/039 @@ -128,10 +128,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..2ae80c3 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 -- 2.34.1