diff --git a/test/nvmf/host/async_init.sh b/test/nvmf/host/async_init.sh new file mode 100755 index 000000000..83c6ab777 --- /dev/null +++ b/test/nvmf/host/async_init.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash + +testdir=$(readlink -f $(dirname $0)) +rootdir=$(readlink -f $testdir/../../..) +rpc_py=$rootdir/scripts/rpc.py + +source $rootdir/test/common/autotest_common.sh +source $rootdir/test/nvmf/common.sh + +null_bdev_size=1024 +null_block_size=512 +null_bdev=null0 +nvme_bdev=nvme0 + +if [ "$TEST_TRANSPORT" != "tcp" ]; then + echo "This test can only be executed with TCP for now" + exit 0 +fi + +nvmftestinit +nvmfappstart -m 0x1 + +# First create a null bdev and expose it over NVMeoF +$rpc_py nvmf_create_transport $NVMF_TRANSPORT_OPTS +$rpc_py bdev_null_create $null_bdev $null_bdev_size $null_block_size +$rpc_py bdev_wait_for_examine +$rpc_py nvmf_create_subsystem nqn.2016-06.io.spdk:cnode0 -a +$rpc_py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode0 $null_bdev +$rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode0 -t $TEST_TRANSPORT \ + -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT + +# Then attach NVMe bdev by connecting back to itself, with the target app running on a single core. +# This verifies that the initialization is completely asynchronous, as each blocking call would +# stall the application. +$rpc_py bdev_nvme_attach_controller -b $nvme_bdev -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP \ + -f ipv4 -s $NVMF_PORT -n nqn.2016-06.io.spdk:cnode0 + +# Make sure the reset is also asynchronous +$rpc_py bdev_nvme_reset_controller $nvme_bdev + +# TODO: Once the async detach path is functional, send a bdev_nvme_detach_controller here + +trap - SIGINT SIGTERM EXIT +nvmftestfini diff --git a/test/nvmf/nvmf.sh b/test/nvmf/nvmf.sh index 2167b6198..79aa94681 100755 --- a/test/nvmf/nvmf.sh +++ b/test/nvmf/nvmf.sh @@ -68,6 +68,7 @@ run_test "nvmf_multicontroller" test/nvmf/host/multicontroller.sh "${TEST_ARGS[@ #run_test test/nvmf/host/identify_kernel_nvmf.sh $TEST_ARGS run_test "nvmf_aer" test/nvmf/host/aer.sh "${TEST_ARGS[@]}" run_test "nvmf_fio" test/nvmf/host/fio.sh "${TEST_ARGS[@]}" +run_test "nvmf_async_init" test/nvmf/host/async_init.sh "${TEST_ARGS[@]}" # There is an intermittent error relating to those tests and Soft-RoCE. # Skip those tests if we are using rxe.