This way, we can report all missing modules at once.
Signed-off-by: Omar Sandoval <osandov@fb.com>
# null_blk helper functions.
_have_null_blk() {
- _have_module null_blk
+ _have_modules null_blk
}
_init_null_blk() {
return 0
}
-_have_module() {
- if modprobe -n -q "$1"; then
- return 0
+_have_modules() {
+ local missing=()
+ local module
+
+ for module in "$@"; do
+ if ! modprobe -n -q "$1"; then
+ missing+=("$module")
+ fi
+ done
+ if [[ ${#missing} -gt 1 ]]; then
+ SKIP_REASON="the following modules are not available: ${missing[*]}"
+ return 1
+ elif [[ ${#missing} -eq 1 ]]; then
+ SKIP_REASON="${missing[0]} module is not available"
+ return 1
fi
- SKIP_REASON="$1 module is not available"
- return 1
+ return 0
}
_have_module_param() {
}
_have_loop() {
- _have_module loop && _have_program losetup
+ _have_modules loop && _have_program losetup
}
_have_blktrace() {
# scsi_debug helper functions.
_have_scsi_debug() {
- _have_module scsi_debug
+ _have_modules scsi_debug
}
_init_scsi_debug() {
TIMED=1
requires() {
- _have_scsi_debug && _have_module sd_mod && _have_module sr_mod
+ _have_scsi_debug && _have_modules sd_mod sr_mod
}
stress_scsi_debug() {
}
_have_nbd() {
- if ! _have_module nbd; then
+ if ! _have_modules nbd; then
return 1
fi
if ! _have_program nbd-server; then
DESCRIPTION="create many subsystems and test discovery"
requires() {
- _have_program nvme && _have_module nvme-loop && _have_module loop && \
- _have_configfs
+ _have_program nvme && _have_modules loop nvme-loop && _have_configfs
}
test() {
QUICK=1
requires() {
- _have_program nvme && _have_module nvme-loop && _have_module loop \
- && _have_configfs
+ _have_program nvme && _have_modules loop nvme-loop && _have_configfs
}
test() {
QUICK=1
requires() {
- _have_program nvme && _have_module nvme-loop && _have_module loop && \
- _have_configfs
+ _have_program nvme && _have_modules loop nvme-loop && _have_configfs
}
test() {
QUICK=1
requires() {
- _have_module nvme-loop && _have_module nvmet && _have_module loop && \
- _have_configfs && _have_module nvme-core && \
- _have_module_param nvme-core multipath
+ _have_modules loop nvme-core nvme-loop nvmet && \
+ _have_module_param nvme-core multipath && _have_configfs
}
test() {
QUICK=1
requires() {
- _have_program nvme && _have_module nvme-loop && _have_module loop && \
- _have_module nvmet && _have_configfs
+ _have_program nvme && _have_modules loop nvme-loop nvmet && \
+ _have_configfs
}
test() {
QUICK=1
requires() {
- _have_program nvme && _have_module nvme-loop && _have_module nvmet && \
- _have_configfs
+ _have_program nvme && _have_modules nvme-loop nvmet && _have_configfs
}
test() {
QUICK=1
requires() {
- _have_program nvme && _have_module nvme-loop && _have_module loop && \
- _have_module nvmet && _have_configfs
+ _have_program nvme && _have_modules loop nvme-loop nvmet && \
+ _have_configfs
}
test() {
QUICK=1
requires() {
- _have_program nvme && _have_module nvme-loop && _have_configfs \
- _have_module nvmet
+ _have_program nvme && _have_modules nvme-loop nvmet && _have_configfs
}
test() {
TIMED=1
requires() {
- _have_program nvme && _have_fio && _have_module loop && \
- _have_configfs && _have_module nvme-loop && \
- _have_module nvmet
+ _have_program nvme && _have_fio && \
+ _have_modules loop nvme-loop nvmet && _have_configfs
}
test() {
requires() {
_have_program nvme && _have_fio && _have_configfs && \
- _have_module nvme-loop && _have_module nvmet
+ _have_modules nvme-loop nvmet
}
test() {
requires() {
_have_program nvme && _have_program mkfs.xfs && _have_program fio && \
- _have_module loop && _have_module nvmet && \
- _have_module nvme-loop && _have_configfs
+ _have_modules loop nvme-loop nvmet && _have_configfs
}
test() {
requires() {
_have_program nvme && _have_program mkfs.xfs && _have_fio && \
- _have_module nvmet && _have_module nvme-loop && \
- _have_configfs
+ _have_modules nvme-loop nvmet && _have_configfs
}
test() {
QUICK=1
requires() {
- _have_program nvme && _have_module nvme-loop && _have_module loop && \
- _have_module nvmet && _have_configfs
+ _have_program nvme && _have_modules loop nvme-loop nvmet && \
+ _have_configfs
}
test() {
QUICK=1
requires() {
- _have_program nvme && _have_module nvme-loop && _have_module loop && \
- _have_configfs
+ _have_program nvme && _have_modules loop nvme-loop && _have_configfs
}
test() {
DESCRIPTION="create/delete many NVMeOF block device-backed ns and test discovery"
requires() {
- _have_program nvme && _have_module nvme-loop && _have_module nvmet \
- _have_configfs
+ _have_program nvme && _have_modules nvme-loop nvmet && _have_configfs
}
test() {
DESCRIPTION="create/delete many file-ns and test discovery"
requires() {
- _have_program nvme && _have_module nvme-loop && _have_module nvmet && \
- _have_configfs
+ _have_program nvme && _have_modules nvme-loop nvmet && _have_configfs
}
test() {
QUICK=1
requires() {
- _have_program nvme && _have_module nvme-loop && _have_module loop && \
- _have_module nvmet && _have_configfs
+ _have_program nvme && _have_modules loop nvme-loop nvmet && \
+ _have_configfs
}
test() {
QUICK=1
requires() {
- _have_program nvme && _have_module nvme-loop && _have_configfs \
- _have_module nvmet
+ _have_program nvme && _have_modules nvme-loop nvmet && _have_configfs
}
test() {
QUICK=1
requires() {
- _have_program nvme && _have_module nvme-loop && _have_module loop && \
- _have_module nvmet && _have_configfs
+ _have_program nvme && _have_modules loop nvme-loop nvmet && \
+ _have_configfs
}
test() {
QUICK=1
requires() {
- _have_program nvme && _have_module nvme-loop && _have_module loop && \
- _have_module nvmet && _have_configfs
+ _have_program nvme && _have_modules loop nvme-loop nvmet && \
+ _have_configfs
}
test() {
QUICK=1
requires() {
- _have_program nvme && _have_module nvme-loop && _have_module loop && \
- _have_module nvmet && _have_configfs
+ _have_program nvme && _have_modules loop nvme-loop nvmet && \
+ _have_configfs
}
test() {
QUICK=1
requires() {
- _have_program nvme && _have_module nvme-loop && _have_module loop && \
- _have_module nvmet && _have_configfs
+ _have_program nvme && _have_modules loop nvme-loop nvmet && \
+ _have_configfs
}
test() {
QUICK=1
requires() {
- _have_program nvme && _have_module nvme-loop && _have_module loop && \
- _have_module nvmet && _have_configfs
+ _have_program nvme && _have_modules loop nvme-loop nvmet && \
+ _have_configfs
}
test() {
QUICK=1
requires() {
- _have_program nvme && _have_module nvme-loop && _have_module loop && \
- _have_module nvmet && _have_configfs
+ _have_program nvme && _have_modules loop nvme-loop nvmet && \
+ _have_configfs
}
test() {
QUICK=1
requires() {
- _have_program nvme && _have_module nvme-loop && _have_module loop && \
- _have_module nvmet && _have_configfs
+ _have_program nvme && _have_modules loop nvme-loop nvmet && \
+ _have_configfs
}
test() {
QUICK=1
requires() {
- _have_program nvme && _have_module nvme-loop && _have_module loop && \
- _have_module nvmet && _have_configfs
+ _have_program nvme && _have_modules loop nvme-loop nvmet && \
+ _have_configfs
}
test() {
scsi_dh_emc
scsi_dh_rdac
)
- for m in "${required_modules[@]}"; do
- _have_module "$m" || return $?
- done
+ _have_modules "${required_modules[@]}" || return 1
for p in mkfs.ext4 mkfs.xfs multipath multipathd pidof sg_reset; do
_have_program "$p" || return $?
}
_have_scsi_generic() {
- _have_module sg
+ _have_modules sg
}
_test_dev_is_scsi() {
target_core_iblock
target_core_mod
)
- for m in "${required_modules[@]}"; do
- _have_module "$m" || return $?
- done
+ _have_modules "${required_modules[@]}" || return 1
for p in mkfs.ext4 mkfs.xfs multipath multipathd pidof sg_reset; do
_have_program "$p" || return $?