Commit 11d13b85 authored by Michal Berger's avatar Michal Berger Committed by Tomasz Zawadzki
Browse files

test/nvmf: Test different abort qd sizes under SPDK and kernel targets



Signed-off-by: default avatarMichal Berger <michalx.berger@intel.com>
Change-Id: I79ede7670477ed0d8eb38fa3eced4a9b70c64620
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/8962


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
parent dcd1fb79
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -263,6 +263,7 @@ if [ $SPDK_RUN_FUNCTIONAL_TEST -eq 1 ]; then
				run_test "nvmf_identify_passthru" test/nvmf/target/identify_passthru.sh --transport=$SPDK_TEST_NVMF_TRANSPORT
			fi
			run_test "nvmf_dif" test/nvmf/target/dif.sh
			run_test "nvmf_abort_qd_sizes" test/nvmf/target/abort_qd_sizes.sh
		elif [ "$SPDK_TEST_NVMF_TRANSPORT" = "fc" ]; then
			run_test "nvmf_fc" ./test/nvmf/nvmf.sh --transport=$SPDK_TEST_NVMF_TRANSPORT
			run_test "spdkcli_nvmf_fc" ./test/spdkcli/nvmf.sh
+70 −0
Original line number Diff line number Diff line
@@ -551,3 +551,73 @@ function remove_spdk_ns() {
	# Let it settle
	sleep 1
}

configure_kernel_target() {
	# Keep it global in scope for easier cleanup
	kernel_name=${1:-kernel_target}
	nvmet=/sys/kernel/config/nvmet
	kernel_subsystem=$nvmet/subsystems/$kernel_name
	kernel_namespace=$kernel_subsystem/namespaces/1
	kernel_port=$nvmet/ports/1

	local block nvme

	if [[ ! -e /sys/module/nvmet ]]; then
		modprobe nvmet
	fi

	[[ -e $nvmet ]]

	"$rootdir/scripts/setup.sh" reset

	# Find nvme with an active ns device
	for block in /sys/block/nvme*; do
		[[ -e $block ]] || continue
		block_in_use "${block##*/}" || nvme="/dev/${block##*/}"
	done

	[[ -b $nvme ]]

	mkdir "$kernel_subsystem"
	mkdir "$kernel_namespace"
	mkdir "$kernel_port"

	# It allows only %llx value and for some reason kernel swaps the byte order
	# so setting the serial is not very useful here
	# "$kernel_subsystem/attr_serial"
	echo "SPDK-$kernel_name" > "$kernel_subsystem/attr_model"

	echo 1 > "$kernel_subsystem/attr_allow_any_host"
	echo "$nvme" > "$kernel_namespace/device_path"
	echo 1 > "$kernel_namespace/enable"

	# By default use initiator ip which was set by nvmftestinit(). This is the
	# interface which resides in the main net namespace and which is visible
	# to nvmet.

	echo "$NVMF_INITIATOR_IP" > "$kernel_port/addr_traddr"
	echo "$TEST_TRANSPORT" > "$kernel_port/addr_trtype"
	echo "$NVMF_PORT" > "$kernel_port/addr_trsvcid"
	echo ipv4 > "$kernel_port/addr_adrfam"

	# Enable the listener by linking the port to previously created subsystem
	ln -s "$kernel_subsystem" "$kernel_port/subsystems/"

	# Check if target is available
	nvme discover -a "$NVMF_INITIATOR_IP" -t "$TEST_TRANSPORT" -s "$NVMF_PORT"
}

clean_kernel_target() {
	[[ -e $kernel_subsystem ]] || return 0

	echo 0 > "$kernel_namespace/enable"

	rm -f "$kernel_port/subsystems/$kernel_name"
	rmdir "$kernel_namespace"
	rmdir "$kernel_port"
	rmdir "$kernel_subsystem"

	modules=(/sys/module/nvmet/holders/*)

	modprobe -r "${modules[@]##*/}" nvmet
}
+79 −0
Original line number Diff line number Diff line
#!/usr/bin/env bash

testdir=$(readlink -f "$(dirname "$0")")
rootdir=$(readlink -f "$testdir/../../../")

# Set defaults we want to work with
set -- "--transport=tcp" "--iso" "$@"

source "$rootdir/test/common/autotest_common.sh"
source "$rootdir/test/nvmf/common.sh"

shopt -s nullglob

rabort() {
	local trtype=$1
	local adrfam=$2
	local traddr=$3
	local trsvcid=$4
	local subnqn=$5

	local qds qd
	local target r

	qds=(4 24 64)

	for r in trtype adrfam traddr trsvcid subnqn; do
		target=${target:+$target }$r:${!r}
	done

	for qd in "${qds[@]}"; do
		"$SPDK_EXAMPLE_DIR/abort" \
			-q "$qd" \
			-w rw \
			-M 50 \
			-o 4096 \
			-r "$target"
	done
}

spdk_target() {
	local name=spdk_target
	local subnqn=nqn.2016-06.io.spdk:$name

	rpc_cmd bdev_nvme_attach_controller -t pcie -a "$nvme" -b "$name"

	rpc_cmd nvmf_create_transport $NVMF_TRANSPORT_OPTS -u 8192
	rpc_cmd nvmf_create_subsystem "$subnqn" -a -s "$NVMF_SERIAL"
	rpc_cmd nvmf_subsystem_add_ns "$subnqn" "${name}n1"
	rpc_cmd nvmf_subsystem_add_listener "$subnqn" -t "$TEST_TRANSPORT" -a "$NVMF_FIRST_TARGET_IP" -s "$NVMF_PORT"

	rabort "$TEST_TRANSPORT" IPv4 "$NVMF_FIRST_TARGET_IP" "$NVMF_PORT" "$subnqn"

	rpc_cmd nvmf_delete_subsystem "$subnqn"
	rpc_cmd bdev_nvme_detach_controller "$name"
}

kernel_target() {
	local name=kernel_target

	configure_kernel_target "$name"
	rabort "$TEST_TRANSPORT" IPv4 "$NVMF_INITIATOR_IP" "$NVMF_PORT" "$name"
	clean_kernel_target
}

nvmftestinit
nvmfappstart -m 0xf

trap 'process_shm --id $NVMF_APP_SHM_ID || :; nvmftestfini || :; clean_kernel_target' SIGINT SIGTERM EXIT

mapfile -t nvmes < <(nvme_in_userspace)
((${#nvmes[@]} > 0))

nvme=${nvmes[0]}

run_test "spdk_target_abort" spdk_target
run_test "kernel_target_abort" kernel_target

trap - SIGINT SIGTERM EXIT
nvmftestfini