@@ -55,6 +55,24 @@ _have_module_param() {
return 0
}
+_have_module_param_value() {
+ local value
+
+ modprobe "$1"
+
+ if ! _have_module_param "$1" "$2"; then
+ return 1
+ fi
+
+ value=$(cat "/sys/module/$1/parameters/$2")
+ if [[ "${value}" != "$3" ]]; then
+ SKIP_REASON="$1 module parameter $2 must be set to $3"
+ return 1
+ fi
+
+ return 0
+}
+
_have_program() {
if command -v "$1" >/dev/null 2>&1; then
return 0
@@ -12,18 +12,13 @@ QUICK=1
requires() {
_have_modules loop nvme-core nvme-loop nvmet && \
- _have_module_param nvme-core multipath && _have_configfs
+ _have_module_param_value nvme_core multipath Y && \
+ _have_configfs
}
test() {
echo "Running ${TEST_NAME}"
- # Clean up all stale modules
- modprobe -r nvme-loop
- modprobe -r nvme-core
- modprobe -r nvmet
-
- modprobe nvme-core multipath=1
modprobe nvmet
modprobe nvme-loop
@@ -57,7 +52,6 @@ test() {
rm "$TMPDIR/img"
modprobe -r nvme-loop
- modprobe -r nvme-core
modprobe -r nvmet
echo "Test complete"
On test systems with existing nvme drives or built-in modules it may not be possible to remove nvme-core in order to re-probe it with multipath=1. Instead, skip the test if the multipath parameter is not already set ahead of time. Note: the multipath parameter of nvme-core is set by default if CONFIG_NVME_MULTIPATH is set so this will only affect systems that explicitly disable it via the module parameter. Signed-off-by: Logan Gunthorpe <logang@deltatee.com> --- common/rc | 18 ++++++++++++++++++ tests/nvme/005 | 10 ++-------- 2 files changed, 20 insertions(+), 8 deletions(-)