In many cases, addressing bdevs by their UUIDs is often easier than using their names, which can be somewhat arbitrary. For instance, the NVMe bdev builds a name by addng the n{NSID} suffix to the controller's name, while the UUID is filled with NGUID (if available). The UUID alias is stored in the form defined by RFC 4122, meaning five groups of lower-case hexadecimal characters. It's important to note that bdev layer uses case-sensitive name comparison, so the user needs to use the same textual UUID representation. Signed-off-by: Konrad Sztyber <konrad.sztyber@intel.com> Change-Id: I8b112fb81f29e952459d5f81d97fdc7a591730f8 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11395 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com> Community-CI: Mellanox Build Bot Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
56 lines
1.8 KiB
Bash
Executable File
56 lines
1.8 KiB
Bash
Executable File
#!/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
|
|
|
|
# Since we're connecting the same bdev, we need to use a different NGUID to avoid errors when
|
|
# registering the bdev during bdev_nvme_attach_controller
|
|
nguid=$(uuidgen | tr -d '-')
|
|
|
|
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 -g $nguid
|
|
$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 bdev was created successfully
|
|
$rpc_py bdev_get_bdevs -b ${nvme_bdev}n1
|
|
|
|
# Make sure the reset is also asynchronous
|
|
$rpc_py bdev_nvme_reset_controller $nvme_bdev
|
|
|
|
# And that the bdev is still available after a reset
|
|
$rpc_py bdev_get_bdevs -b ${nvme_bdev}n1
|
|
|
|
# Finally, detach the controller to verify the detach path
|
|
$rpc_py bdev_nvme_detach_controller $nvme_bdev
|
|
|
|
trap - SIGINT SIGTERM EXIT
|
|
nvmftestfini
|