[PATCH blktests v1] nvmeof-mp: Remove nvmeof-mp tests

John Meneghini jmeneghi at redhat.com
Tue Jun 6 12:13:41 PDT 2023


Reviewed-by: John Meneghini <jmeneghi at redhat.com>

Do it.

/John

On 6/6/23 03:54, Daniel Wagner wrote:
> The nvmeof-mp are designed to test a NVMe multipathing setup using
> dm_multipath, which was a configuration RHEL shipped. In the meantime,
> RHEL switched also to NVMe native multipathing which is tested with the
> nvme tests.
> 
> The nvme tests cover all the use cases which are testes by nvmeof-mp
> including the transport failure, see nvme/040.
> 
> During LSFMM 2023 conference it was decided it is better to drop these
> tests and reduce the maintenance burden on blktests.
> 
> Cc: John Meneghini <jmeneghi at redhat.com>
> Signed-off-by: Daniel Wagner <dwagner at suse.de>
> ---
>   Documentation/running-tests.md |   4 +-
>   common/multipath-over-rdma     |   2 +-
>   tests/nvmeof-mp/.gitignore     |   1 -
>   tests/nvmeof-mp/001            |  40 -----
>   tests/nvmeof-mp/001.out        |   2 -
>   tests/nvmeof-mp/002            |  36 ----
>   tests/nvmeof-mp/002.out        |   2 -
>   tests/nvmeof-mp/004            |  40 -----
>   tests/nvmeof-mp/004.out        |   2 -
>   tests/nvmeof-mp/005            |  26 ---
>   tests/nvmeof-mp/005.out        |   2 -
>   tests/nvmeof-mp/006            |  26 ---
>   tests/nvmeof-mp/006.out        |   2 -
>   tests/nvmeof-mp/009            |  26 ---
>   tests/nvmeof-mp/009.out        |   2 -
>   tests/nvmeof-mp/010            |  26 ---
>   tests/nvmeof-mp/010.out        |   2 -
>   tests/nvmeof-mp/011            |  32 ----
>   tests/nvmeof-mp/011.out        |   2 -
>   tests/nvmeof-mp/012            |  42 -----
>   tests/nvmeof-mp/012.out        |   2 -
>   tests/nvmeof-mp/multipath.conf |  27 ---
>   tests/nvmeof-mp/rc             | 292 ---------------------------------
>   23 files changed, 2 insertions(+), 636 deletions(-)
>   delete mode 100644 tests/nvmeof-mp/.gitignore
>   delete mode 100755 tests/nvmeof-mp/001
>   delete mode 100644 tests/nvmeof-mp/001.out
>   delete mode 100755 tests/nvmeof-mp/002
>   delete mode 100644 tests/nvmeof-mp/002.out
>   delete mode 100755 tests/nvmeof-mp/004
>   delete mode 100644 tests/nvmeof-mp/004.out
>   delete mode 100755 tests/nvmeof-mp/005
>   delete mode 100644 tests/nvmeof-mp/005.out
>   delete mode 100755 tests/nvmeof-mp/006
>   delete mode 100644 tests/nvmeof-mp/006.out
>   delete mode 100755 tests/nvmeof-mp/009
>   delete mode 100644 tests/nvmeof-mp/009.out
>   delete mode 100755 tests/nvmeof-mp/010
>   delete mode 100644 tests/nvmeof-mp/010.out
>   delete mode 100755 tests/nvmeof-mp/011
>   delete mode 100644 tests/nvmeof-mp/011.out
>   delete mode 100755 tests/nvmeof-mp/012
>   delete mode 100644 tests/nvmeof-mp/012.out
>   delete mode 100644 tests/nvmeof-mp/multipath.conf
>   delete mode 100755 tests/nvmeof-mp/rc
> 
> diff --git a/Documentation/running-tests.md b/Documentation/running-tests.md
> index b35ae10316e4..62fae60f43fa 100644
> --- a/Documentation/running-tests.md
> +++ b/Documentation/running-tests.md
> @@ -110,18 +110,16 @@ The NVMe tests can be additionally parameterized via environment variables.
>   - nvme_num_iter: 1000 (default)
>     The number of iterations a test should do.
>   
> -### Running nvme-rdma nvmeof-mp srp tests
> +### Running nvme-rdma srp tests
>   
>   Most of these tests will use the rdma_rxe (soft-RoCE) driver by default. The siw (soft-iWARP) driver is also supported.
>   ```sh
>   To use the rdma_rxe driver:
>   nvme_trtype=rdma ./check nvme/
> -./check nvmeof-mp/
>   ./check srp/
>   
>   To use the siw driver:
>   use_siw=1 nvme_trtype=rdma ./check nvme/
> -use_siw=1 ./check nvmeof-mp/
>   use_siw=1 ./check srp/
>   ```
>   
> diff --git a/common/multipath-over-rdma b/common/multipath-over-rdma
> index 9bc1c19258f4..f124897917ca 100644
> --- a/common/multipath-over-rdma
> +++ b/common/multipath-over-rdma
> @@ -2,7 +2,7 @@
>   # SPDX-License-Identifier: GPL-2.0+
>   # Copyright (c) 2017-2018 Western Digital Corporation or its affiliates.
>   #
> -# Functions and global variables used by both the srp and nvmeof-mp tests.
> +# Functions and global variables used by the srp tests.
>   
>   . common/shellcheck
>   . common/null_blk
> diff --git a/tests/nvmeof-mp/.gitignore b/tests/nvmeof-mp/.gitignore
> deleted file mode 100644
> index ecb6268a585b..000000000000
> --- a/tests/nvmeof-mp/.gitignore
> +++ /dev/null
> @@ -1 +0,0 @@
> -multipath.conf
> diff --git a/tests/nvmeof-mp/001 b/tests/nvmeof-mp/001
> deleted file mode 100755
> index 70a4455808cb..000000000000
> --- a/tests/nvmeof-mp/001
> +++ /dev/null
> @@ -1,40 +0,0 @@
> -#!/bin/bash
> -# SPDX-License-Identifier: GPL-2.0+
> -# Copyright (c) 2016-2018 Western Digital Corporation or its affiliates
> -
> -. tests/nvmeof-mp/rc
> -
> -DESCRIPTION="Log in and log out"
> -QUICK=1
> -
> -count_devices() {
> -	local d devs=0
> -
> -	for d in /sys/class/nvme-fabrics/ctl/*/*/device; do
> -		[[ "$d" =~ hwmon[0-9]+|ng[0-9]+n[0-9]+ ]] && continue
> -		[ -d "$d" ] && ((devs++))
> -	done
> -	echo "$devs"
> -}
> -
> -wait_for_devices() {
> -	local expected=0 i devices
> -
> -	for i in $(rdma_network_interfaces); do
> -		((expected++))
> -	done
> -
> -	use_blk_mq y || return $?
> -	for ((i=0;i<100;i++)); do
> -		devices=$(count_devices)
> -		[ "$devices" -ge "$expected" ] && break
> -		sleep .1
> -	done
> -	echo "count_devices(): $devices <> $expected" >>"$FULL"
> -	[ "$devices" -ge "$expected" ]
> -}
> -
> -test() {
> -	trap 'trap "" EXIT; teardown' EXIT
> -	setup && wait_for_devices && echo Passed
> -}
> diff --git a/tests/nvmeof-mp/001.out b/tests/nvmeof-mp/001.out
> deleted file mode 100644
> index a7d4cb9bcb29..000000000000
> --- a/tests/nvmeof-mp/001.out
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -Configured NVMe target driver
> -Passed
> diff --git a/tests/nvmeof-mp/002 b/tests/nvmeof-mp/002
> deleted file mode 100755
> index 2aebe9895649..000000000000
> --- a/tests/nvmeof-mp/002
> +++ /dev/null
> @@ -1,36 +0,0 @@
> -#!/bin/bash
> -# SPDX-License-Identifier: GPL-2.0+
> -# Copyright (c) 2016-2018 Western Digital Corporation or its affiliates
> -
> -. tests/nvmeof-mp/rc
> -
> -DESCRIPTION="File I/O on top of multipath concurrently with logout and login (mq)"
> -TIMED=1
> -
> -test_disconnect_repeatedly() {
> -	local dev fio_status m
> -
> -	use_blk_mq y || return $?
> -	dev=$(get_bdev 0) || return $?
> -	m=$(mountpoint 0) || return $?
> -	create_filesystem "$dev" || return $?
> -	mount_and_check "$dev" "$m" || return $?
> -	# shellcheck disable=SC2064
> -	trap "unmount_and_check $m" RETURN
> -	simulate_network_failure_loop "$dev" "$TIMEOUT" &
> -	run_fio --verify=md5 --rw=randwrite --bs=4K --loops=$((10**6)) \
> -		--iodepth=64 --group_reporting --sync=1 --direct=1 \
> -		--ioengine=libaio --directory="$m" --runtime="${TIMEOUT}" \
> -		--name=data-integrity-test-mq --thread --numjobs=16 \
> -		--output="${RESULTS_DIR}/nvmeof-mp/fio-output-002.txt" \
> -		>>"$FULL"
> -	fio_status=$?
> -	wait
> -	return $fio_status
> -}
> -
> -test() {
> -	: "${TIMEOUT:=30}"
> -	trap 'trap "" EXIT; teardown' EXIT
> -	setup && test_disconnect_repeatedly && echo Passed
> -}
> diff --git a/tests/nvmeof-mp/002.out b/tests/nvmeof-mp/002.out
> deleted file mode 100644
> index a7d4cb9bcb29..000000000000
> --- a/tests/nvmeof-mp/002.out
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -Configured NVMe target driver
> -Passed
> diff --git a/tests/nvmeof-mp/004 b/tests/nvmeof-mp/004
> deleted file mode 100755
> index 990fcfc9e472..000000000000
> --- a/tests/nvmeof-mp/004
> +++ /dev/null
> @@ -1,40 +0,0 @@
> -#!/bin/bash
> -# SPDX-License-Identifier: GPL-2.0+
> -# Copyright (c) 2016-2018 Western Digital Corporation or its affiliates
> -
> -. tests/nvmeof-mp/rc
> -
> -DESCRIPTION="File I/O on top of multipath concurrently with logout and login (sq-on-mq)"
> -TIMED=1
> -
> -requires() {
> -	_have_legacy_dm
> -}
> -
> -test_disconnect_repeatedly() {
> -	local dev fio_status m
> -
> -	use_blk_mq n || return $?
> -	dev=$(get_bdev 0) || return $?
> -	m=$(mountpoint 0) || return $?
> -	create_filesystem "$dev" || return $?
> -	mount_and_check "$dev" "$m" || return $?
> -	# shellcheck disable=SC2064
> -	trap "unmount_and_check $m" RETURN
> -	simulate_network_failure_loop "$dev" "$TIMEOUT" &
> -	run_fio --verify=md5 --rw=randwrite --bs=4K --loops=$((10**6)) \
> -		--iodepth=64 --group_reporting --sync=1 --direct=1 \
> -		--ioengine=libaio --directory="$m" \
> -		--name=data-integrity-test-02-sq-on-mq --thread \
> -		--numjobs=16 --runtime="${TIMEOUT}" \
> -		--output="${RESULTS_DIR}/nvmeof-mp/fio-output-004.txt" >>"$FULL"
> -	fio_status=$?
> -	wait
> -	return $fio_status
> -}
> -
> -test() {
> -	: "${TIMEOUT:=30}"
> -	trap 'trap "" EXIT; teardown' EXIT
> -	setup && test_disconnect_repeatedly && echo Passed
> -}
> diff --git a/tests/nvmeof-mp/004.out b/tests/nvmeof-mp/004.out
> deleted file mode 100644
> index a7d4cb9bcb29..000000000000
> --- a/tests/nvmeof-mp/004.out
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -Configured NVMe target driver
> -Passed
> diff --git a/tests/nvmeof-mp/005 b/tests/nvmeof-mp/005
> deleted file mode 100755
> index fb623acc0d99..000000000000
> --- a/tests/nvmeof-mp/005
> +++ /dev/null
> @@ -1,26 +0,0 @@
> -#!/bin/bash
> -# SPDX-License-Identifier: GPL-2.0+
> -# Copyright (c) 2016-2018 Western Digital Corporation or its affiliates
> -
> -. tests/nvmeof-mp/rc
> -
> -DESCRIPTION="Direct I/O with large transfer sizes and bs=4M"
> -QUICK=1
> -
> -test_large_transfer_size() {
> -	local dev m
> -
> -	use_blk_mq y || return $?
> -	dev=$(get_bdev 0) || return $?
> -	run_fio --verify=md5 --rw=randwrite --bs=4M --loops=$((10**6)) \
> -		--iodepth=4 --group_reporting --sync=1 --direct=1 \
> -		--ioengine=libaio \
> -		--filename="$dev" --name=large-io-test --thread --numjobs=1 \
> -		--runtime=10 --output="${RESULTS_DIR}/nvmeof-mp/fio-output-005.txt" \
> -		>>"$FULL"
> -}
> -
> -test() {
> -	trap 'trap "" EXIT; teardown' EXIT
> -	setup && test_large_transfer_size && echo Passed
> -}
> diff --git a/tests/nvmeof-mp/005.out b/tests/nvmeof-mp/005.out
> deleted file mode 100644
> index a7d4cb9bcb29..000000000000
> --- a/tests/nvmeof-mp/005.out
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -Configured NVMe target driver
> -Passed
> diff --git a/tests/nvmeof-mp/006 b/tests/nvmeof-mp/006
> deleted file mode 100755
> index 2034ed1729c6..000000000000
> --- a/tests/nvmeof-mp/006
> +++ /dev/null
> @@ -1,26 +0,0 @@
> -#!/bin/bash
> -# SPDX-License-Identifier: GPL-2.0+
> -# Copyright (c) 2016-2018 Western Digital Corporation or its affiliates
> -
> -. tests/nvmeof-mp/rc
> -
> -DESCRIPTION="Direct I/O with large transfer sizes and bs=8M"
> -QUICK=1
> -
> -test_large_transfer_size() {
> -	local dev m
> -
> -	use_blk_mq y || return $?
> -	dev=$(get_bdev 0) || return $?
> -	run_fio --verify=md5 --rw=randwrite --bs=8M --loops=$((10**6)) \
> -		--iodepth=4 --group_reporting --sync=1 --direct=1 \
> -		--ioengine=libaio \
> -		--filename="$dev" --name=large-io-test --thread --numjobs=1 \
> -		--runtime=10 --output="${RESULTS_DIR}/nvmeof-mp/fio-output-006.txt" \
> -		>>"$FULL"
> -}
> -
> -test() {
> -	trap 'trap "" EXIT; teardown' EXIT
> -	setup && test_large_transfer_size && echo Passed
> -}
> diff --git a/tests/nvmeof-mp/006.out b/tests/nvmeof-mp/006.out
> deleted file mode 100644
> index a7d4cb9bcb29..000000000000
> --- a/tests/nvmeof-mp/006.out
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -Configured NVMe target driver
> -Passed
> diff --git a/tests/nvmeof-mp/009 b/tests/nvmeof-mp/009
> deleted file mode 100755
> index 35c706fd8534..000000000000
> --- a/tests/nvmeof-mp/009
> +++ /dev/null
> @@ -1,26 +0,0 @@
> -#!/bin/bash
> -# SPDX-License-Identifier: GPL-2.0+
> -# Copyright (c) 2016-2018 Western Digital Corporation or its affiliates
> -
> -. tests/nvmeof-mp/rc
> -
> -DESCRIPTION="Buffered I/O with large transfer sizes and bs=4M"
> -QUICK=1
> -
> -test_large_transfer_size() {
> -	local dev m
> -
> -	use_blk_mq y || return $?
> -	dev=$(get_bdev 0) || return $?
> -	run_fio --verify=md5 --rw=randwrite --bs=4M --loops=$((10**6)) \
> -		--iodepth=4 --group_reporting --sync=1 --direct=0 \
> -		--ioengine=libaio \
> -		--filename="$dev" --name=large-io-test --thread --numjobs=1 \
> -		--runtime=10 --output="${RESULTS_DIR}/nvmeof-mp/fio-output-009.txt" \
> -		>>"$FULL"
> -}
> -
> -test() {
> -	trap 'trap "" EXIT; teardown' EXIT
> -	setup && test_large_transfer_size && echo Passed
> -}
> diff --git a/tests/nvmeof-mp/009.out b/tests/nvmeof-mp/009.out
> deleted file mode 100644
> index a7d4cb9bcb29..000000000000
> --- a/tests/nvmeof-mp/009.out
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -Configured NVMe target driver
> -Passed
> diff --git a/tests/nvmeof-mp/010 b/tests/nvmeof-mp/010
> deleted file mode 100755
> index 9f6c245bb13e..000000000000
> --- a/tests/nvmeof-mp/010
> +++ /dev/null
> @@ -1,26 +0,0 @@
> -#!/bin/bash
> -# SPDX-License-Identifier: GPL-2.0+
> -# Copyright (c) 2016-2018 Western Digital Corporation or its affiliates
> -
> -. tests/nvmeof-mp/rc
> -
> -DESCRIPTION="Buffered I/O with large transfer sizes and bs=8M"
> -QUICK=1
> -
> -test_large_transfer_size() {
> -	local dev m
> -
> -	use_blk_mq y || return $?
> -	dev=$(get_bdev 0) || return $?
> -	run_fio --verify=md5 --rw=randwrite --bs=8M --loops=$((10**6)) \
> -		--iodepth=4 --group_reporting --sync=1 --direct=0 \
> -		--ioengine=libaio \
> -		--filename="$dev" --name=large-io-test --thread --numjobs=1 \
> -		--runtime=10 --output="${RESULTS_DIR}/nvmeof-mp/fio-output-010.txt" \
> -		>>"$FULL"
> -}
> -
> -test() {
> -	trap 'trap "" EXIT; teardown' EXIT
> -	setup && test_large_transfer_size && echo Passed
> -}
> diff --git a/tests/nvmeof-mp/010.out b/tests/nvmeof-mp/010.out
> deleted file mode 100644
> index a7d4cb9bcb29..000000000000
> --- a/tests/nvmeof-mp/010.out
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -Configured NVMe target driver
> -Passed
> diff --git a/tests/nvmeof-mp/011 b/tests/nvmeof-mp/011
> deleted file mode 100755
> index d0a4f8c0db30..000000000000
> --- a/tests/nvmeof-mp/011
> +++ /dev/null
> @@ -1,32 +0,0 @@
> -#!/bin/bash
> -# SPDX-License-Identifier: GPL-2.0+
> -# Copyright (c) 2016-2018 Western Digital Corporation or its affiliates
> -
> -. tests/nvmeof-mp/rc
> -
> -DESCRIPTION="Block I/O on top of multipath concurrently with logout and login"
> -TIMED=1
> -
> -test_disconnect_repeatedly() {
> -	local dev fio_status m
> -
> -	use_blk_mq y || return $?
> -	dev=$(get_bdev 0) || return $?
> -	simulate_network_failure_loop "$dev" "$TIMEOUT" &
> -	run_fio --verify=md5 --rw=randwrite --bs=4K --loops=10000 \
> -		--ioengine=libaio --iodepth=64 --iodepth_batch=32 \
> -		--group_reporting --sync=1 --direct=1 --filename="$dev" \
> -		--name=data-integrity-test-06 --thread --numjobs=1 \
> -		--runtime="${TIMEOUT}" \
> -		--output="${RESULTS_DIR}/nvmeof-mp/fio-output-011.txt" \
> -		>>"$FULL"
> -	fio_status=$?
> -	wait
> -	return $fio_status
> -}
> -
> -test() {
> -	: "${TIMEOUT:=30}"
> -	trap 'trap "" EXIT; teardown' EXIT
> -	setup && test_disconnect_repeatedly && echo Passed
> -}
> diff --git a/tests/nvmeof-mp/011.out b/tests/nvmeof-mp/011.out
> deleted file mode 100644
> index a7d4cb9bcb29..000000000000
> --- a/tests/nvmeof-mp/011.out
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -Configured NVMe target driver
> -Passed
> diff --git a/tests/nvmeof-mp/012 b/tests/nvmeof-mp/012
> deleted file mode 100755
> index b2d7a6351bf7..000000000000
> --- a/tests/nvmeof-mp/012
> +++ /dev/null
> @@ -1,42 +0,0 @@
> -#!/bin/bash
> -# SPDX-License-Identifier: GPL-2.0+
> -# Copyright (c) 2018 Western Digital Corporation or its affiliates
> -
> -. tests/nvmeof-mp/rc
> -
> -DESCRIPTION="dm-mpath on top of multiple I/O schedulers"
> -QUICK=1
> -
> -test_io_schedulers() {
> -	local dev m dm scheds
> -
> -	# Load all I/O scheduler kernel modules
> -	for m in "/lib/modules/$(uname -r)/kernel/block/"*.ko; do
> -		modprobe "$(basename "$m")" >&/dev/null
> -	done
> -	for mq in y n; do
> -		use_blk_mq ${mq} || return $?
> -		dev=$(get_bdev 0) || return $?
> -		dm=$(basename "$(readlink -f "${dev}")") || return $?
> -		scheds="$(_io_schedulers "$dm")" || return $?
> -		for sched in $scheds; do
> -			set_scheduler "$dm" "$sched" \
> -				      >>"$FULL" 2>&1 || continue
> -			echo "I/O scheduler: $sched; use_blk_mq: $mq" >>"$FULL"
> -			run_fio --verify=md5 --rw=randwrite --bs=4K --size=64K \
> -				--ioengine=libaio --iodepth=64 \
> -				--iodepth_batch=32 --group_reporting --sync=1 \
> -				--direct=1 --filename="$dev" \
> -				--name="${sched}" --thread --numjobs=1 \
> -				--output="${RESULTS_DIR}/nvmeof-mp/012-${sched}-${mq}.txt" \
> -				>>"$FULL" ||
> -				return $?
> -		done
> -	done
> -	return 0
> -}
> -
> -test() {
> -	trap 'trap "" EXIT; teardown' EXIT
> -	setup && test_io_schedulers && echo Passed
> -}
> diff --git a/tests/nvmeof-mp/012.out b/tests/nvmeof-mp/012.out
> deleted file mode 100644
> index a7d4cb9bcb29..000000000000
> --- a/tests/nvmeof-mp/012.out
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -Configured NVMe target driver
> -Passed
> diff --git a/tests/nvmeof-mp/multipath.conf b/tests/nvmeof-mp/multipath.conf
> deleted file mode 100644
> index 8aed22e11f3e..000000000000
> --- a/tests/nvmeof-mp/multipath.conf
> +++ /dev/null
> @@ -1,27 +0,0 @@
> -defaults {
> -	find_multipaths		no
> -	user_friendly_names	yes
> -	queue_without_daemon	no
> -}
> -devices {
> -	device {
> -		vendor		"NVME"
> -		product		"Linux"
> -		no_path_retry	"queue"
> -		path_checker	"directio"
> -	}
> -}
> -blacklist {
> -	device {
> -		vendor	"ATA|QEMU"
> -	}
> -	device {
> -		vendor	"Linux"
> -		product	"scsi_debug"
> -	}
> -	devnode	"^nullb.*"
> -}
> -blacklist_exceptions {
> -	property	".*"
> -	devnode		"^nvme"
> -}
> diff --git a/tests/nvmeof-mp/rc b/tests/nvmeof-mp/rc
> deleted file mode 100755
> index 4f4d518c6483..000000000000
> --- a/tests/nvmeof-mp/rc
> +++ /dev/null
> @@ -1,292 +0,0 @@
> -#!/bin/bash
> -# SPDX-License-Identifier: GPL-2.0+
> -# Copyright (c) 2018 Western Digital Corporation or its affiliates
> -
> -. common/rc
> -. common/multipath-over-rdma
> -
> -namespace=(1)
> -elevator=none
> -nvme_subsysnqn="nvme-test"
> -nvme_port=7777
> -ini_timeout=1
> -
> -group_requires() {
> -	local m name p
> -
> -	_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 _check_kernel_option NVME_MULTIPATH && \
> -		_have_module_param_value nvme_core multipath Y; then
> -		SKIP_REASONS+=("CONFIG_NVME_MULTIPATH has been set in .config and multipathing has been enabled in the nvme_core kernel module")
> -		return
> -	fi
> -
> -	_have_configfs || return
> -
> -	_have_module dm_multipath
> -	_have_module dm_queue_length
> -	_have_module dm_service_time
> -	_have_module null_blk
> -	_have_module rdma_cm
> -	_have_module ib_ipoib
> -	_have_module ib_umad
> -	_have_module nvme-rdma
> -	_have_module nvmet-rdma
> -	_have_module rdma_rxe
> -	_have_module scsi_dh_alua
> -	_have_module scsi_dh_emc
> -	_have_module scsi_dh_rdac
> -
> -	for p in mkfs.ext4 mkfs.xfs multipath multipathd pidof rdma fio; do
> -		_have_program "$p" || return
> -	done
> -
> -	_multipathd_version_ge 0.7.0 || return
> -	
> -	_have_root || return
> -
> -	_have_kernel_option DM_UEVENT || return
> -
> -	# shellcheck disable=SC2043
> -	for name in multipathd; do
> -		if pidof "$name" >/dev/null; then
> -			SKIP_REASONS+=("$name must be stopped before the nvmeof-mp tests are run")
> -			return
> -		fi
> -	done
> -	if [ -e /etc/multipath.conf ] &&
> -	    ! diff -q /etc/multipath.conf tests/nvmeof-mp/multipath.conf >&/dev/null
> -	then
> -		SKIP_REASONS+=("/etc/multipath.conf already exists")
> -		return
> -	fi
> -}
> -
> -# Log out, set dm use_blk_mq parameter to $1 and log in.
> -use_blk_mq() {
> -	local dm_mode=$1
> -
> -	(
> -		cd /sys/module/dm_mod/parameters || return $?
> -		if [ -e use_blk_mq ]; then
> -			echo "$dm_mode" >use_blk_mq || return 1
> -		fi
> -	)
> -
> -	log_out &&
> -		remove_mpath_devs &&
> -		start_client &&
> -		log_in &&
> -		return 0
> -
> -	echo "use_blk_mq $* failed" >>"$FULL"
> -	return 1
> -}
> -
> -log_in() {
> -	local i ipv4_addr loginparams
> -
> -	[ -c /dev/nvme-fabrics ] &&
> -		for i in $(rdma_network_interfaces); do
> -			ipv4_addr=$(get_ipv4_addr "$i")
> -			if [ -n "${ipv4_addr}" ]; then
> -				loginparams="transport=rdma,traddr=${ipv4_addr},trsvcid=${nvme_port},nqn=$nvme_subsysnqn"
> -				echo "Login parameters: $loginparams" >>"$FULL"
> -				{
> -					echo -n "$loginparams" > /dev/nvme-fabrics
> -				} 2>>"$FULL"
> -			fi
> -		done
> -}
> -
> -log_out() {
> -	local c
> -
> -	for c in /sys/class/nvme-fabrics/ctl/*/delete_controller; do
> -		[ -e "$c" ] && echo 1 > "$c" &
> -	done
> -	wait
> -}
> -
> -# Simulate network failures for device $1 during $2 seconds.
> -simulate_network_failure_loop() {
> -	local d dev="$1" duration="$2" deadline i rc=0 sf
> -
> -	[ -e "$dev" ] || return 1
> -	[ -n "$duration" ] || return 1
> -	deadline=$(($(_uptime_s) + duration))
> -	while [ $rc = 0 ]; do
> -		sleep_until 5 ${deadline} || break
> -		for d in $(held_by "$dev"); do
> -			for sf in /sys/class/nvme/*/device/*/"${d#/dev/}/reset_controller"; do
> -				[ -e "$sf" ] && echo 1 > "$sf"
> -			done
> -		done
> -	done 2>>"$FULL"
> -
> -	for ((i=0;i<5;i++)); do
> -		log_in 2>/dev/null && break
> -		sleep 1
> -	done
> -}
> -
> -remove_mpath_devs() {
> -	local dm h
> -
> -	{
> -		for h in /sys/class/block/nvme*/holders/*; do
> -			[ -e "$h" ] || continue
> -			d=$(basename "$(dirname "$(dirname "$h")")")
> -			dm=/dev/$(basename "$h")
> -			echo -n "NVME dev $d: removing $dm: "
> -			dmsetup remove "$(dev_to_mpath "$dm")" && echo "done"
> -		done
> -
> -		remove_stale_mpath_devs
> -	} &>> "$FULL"
> -}
> -
> -start_nvme_client() {
> -	modprobe nvme-core dyndbg=+pmf &&
> -		modprobe nvme dyndbg=+pmf &&
> -		modprobe nvme-fabrics dyndbg=+pmf &&
> -		modprobe nvme-rdma dyndbg=+pmf &&
> -		mkdir -p "$(mountpoint 0)"
> -	udevadm settle
> -	if [ ! -c /dev/nvme-fabrics ]; then
> -		echo "Error:  /dev/nvme-fabrics not available"
> -	fi
> -}
> -
> -stop_nvme_client() {
> -	_unload_module nvme-rdma || return $?
> -	_unload_module nvme-fabrics || return $?
> -	# Ignore nvme and nvme-core unload errors - this test may be run on a
> -	# system equipped with one or more NVMe SSDs.
> -	_unload_module nvme >&/dev/null
> -	_unload_module nvme-core >&/dev/null
> -	return 0
> -}
> -
> -# Load the initiator kernel driver with kernel module parameters $1..$n.
> -start_client() {
> -	start_nvme_client
> -}
> -
> -stop_client() {
> -	stop_nvme_client
> -}
> -
> -# Get the name of the initiator device node that communicates with target
> -# device $1. $1 is an index in the $namespace array.
> -get_bdev_path() {
> -	local i=$1 uuid
> -
> -	is_number "$i" || return $?
> -	uuid=$(<"/sys/kernel/config/nvmet/subsystems/${nvme_subsysnqn}/namespaces/${namespace[$1]}/device_uuid") || return $?
> -	echo "/dev/disk/by-id/dm-uuid-mpath-uuid.$uuid"
> -}
> -
> -# Get a /dev/... path that points at dm device number $1. $1 is an index in
> -# the $namespace array.
> -get_bdev() {
> -	get_bdev_n "$1" "$elevator" "$ini_timeout"
> -}
> -
> -configure_nvmet_port() {
> -	local p=$1 ipv4_addr=$2 i
> -
> -	echo "Configuring $p with address $ipv4_addr as an NVMeOF target port" \
> -	     >>"$FULL"
> -	(
> -		cd /sys/kernel/config/nvmet/ports &&
> -			for ((i=1;1;i++)); do [ -e "$i" ] || break; done &&
> -			mkdir "$i" &&
> -			cd "$i" &&
> -			echo ipv4            > addr_adrfam &&
> -			echo rdma            > addr_trtype &&
> -			echo -n "$ipv4_addr" > addr_traddr &&
> -			echo -n ${nvme_port} > addr_trsvcid
> -	)
> -}
> -
> -start_nvme_target() {
> -	local d i ipv4_addr num_ports=0
> -
> -	echo "Configuring NVMe target driver ..." >>"$FULL"
> -	modprobe nvmet dyndbg=+pmf &&
> -		modprobe nvmet-rdma dyndbg=+pmf &&
> -		sleep .1 &&
> -		(
> -			cd /sys/kernel/config/nvmet/subsystems &&
> -				mkdir ${nvme_subsysnqn} &&
> -				cd ${nvme_subsysnqn} &&
> -				cd namespaces &&
> -				mkdir "${namespace[0]}" &&
> -				cd "${namespace[0]}" &&
> -				echo 00000000-0000-0000-0000-000000000000 >device_nguid &&
> -				echo -n /dev/nullb0 >device_path &&
> -				echo 1 >enable &&
> -				cd ../.. &&
> -				echo 1 >attr_allow_any_host
> -		) && for i in $(rdma_network_interfaces); do
> -			ipv4_addr=$(get_ipv4_addr "$i")
> -			if [ -n "${ipv4_addr}" ]; then
> -				configure_nvmet_port "$i" "${ipv4_addr}"
> -				((num_ports++))
> -				true
> -			fi
> -		done &&
> -		if [[ $num_ports = 0 ]]; then
> -			echo "No NVMeOF target ports"
> -			false
> -		fi && (
> -			cd /sys/kernel/config/nvmet/ports &&
> -				for i in *; do
> -					[ -e "$i" ] && (
> -						cd "$i/subsystems" &&
> -							ln -s "../../../subsystems/${nvme_subsysnqn}" .
> -					)
> -				done
> -		)
> -	echo "Configured NVMe target driver"
> -}
> -
> -stop_nvme_target() {
> -	local d
> -
> -	(
> -		cd /sys/kernel/config/nvmet 2>/dev/null &&
> -			rm -f -- ports/*/subsystems/* &&
> -			for d in {*/*/*/*,*/*}; do
> -				[ -e "$d" ] &&
> -				[[ ! "$(basename "$(dirname "$d")")" =~ ana_groups|passthru ]] &&
> -				rmdir "$d"
> -			done
> -	)
> -	_unload_module nvmet_rdma &&
> -		_unload_module nvmet &&
> -		_exit_null_blk
> -}
> -
> -start_target() {
> -	start_nvme_target
> -}
> -
> -stop_target() {
> -	stop_nvme_target
> -}
> -
> -shutdown_client() {
> -	remove_mpath_devs &&
> -		log_out &&
> -		stop_client
> -}
> -
> -# Set up test configuration
> -setup() {
> -	setup_test "$PWD/tests/nvmeof-mp/multipath.conf"
> -}




More information about the Linux-nvme mailing list