In Fedora 27 the nvme program returns before the kernel has loaded the namespces associated with the subsystem. This patch ensures that those namespaces can be enumerated by the kernel before we run any tests on them. Change-Id: I77505ed5cd5b1118a841650851fa5ecaf76f5619 Signed-off-by: Seth Howell <seth.howell@intel.com> Reviewed-on: https://review.gerrithub.io/407829 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
82 lines
2.3 KiB
Bash
Executable File
82 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
testdir=$(readlink -f $(dirname $0))
|
|
rootdir=$(readlink -f $testdir/../../..)
|
|
source $rootdir/test/common/autotest_common.sh
|
|
source $rootdir/test/nvmf/common.sh
|
|
spdk_nvme_cli="/home/sys_sgsw/nvme-cli"
|
|
|
|
MALLOC_BDEV_SIZE=64
|
|
MALLOC_BLOCK_SIZE=512
|
|
|
|
rpc_py="python $rootdir/scripts/rpc.py"
|
|
|
|
set -e
|
|
|
|
RDMA_IP_LIST=$(get_available_rdma_ips)
|
|
NVMF_FIRST_TARGET_IP=$(echo "$RDMA_IP_LIST" | head -n 1)
|
|
if [ -z $NVMF_FIRST_TARGET_IP ]; then
|
|
echo "no NIC for nvmf test"
|
|
exit 0
|
|
fi
|
|
|
|
timing_enter nvme_cli
|
|
timing_enter start_nvmf_tgt
|
|
$NVMF_APP -c $testdir/../nvmf.conf &
|
|
nvmfpid=$!
|
|
|
|
trap "killprocess $nvmfpid; exit 1" SIGINT SIGTERM EXIT
|
|
|
|
waitforlisten $nvmfpid
|
|
timing_exit start_nvmf_tgt
|
|
|
|
bdevs="$bdevs $($rpc_py construct_malloc_bdev $MALLOC_BDEV_SIZE $MALLOC_BLOCK_SIZE)"
|
|
bdevs="$bdevs $($rpc_py construct_malloc_bdev $MALLOC_BDEV_SIZE $MALLOC_BLOCK_SIZE)"
|
|
|
|
modprobe -v nvme-rdma
|
|
|
|
$rpc_py construct_nvmf_subsystem nqn.2016-06.io.spdk:cnode1 '' '' -a -s SPDK00000000000001 -n "$bdevs"
|
|
$rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode1 -t RDMA -a $NVMF_FIRST_TARGET_IP -s "$NVMF_PORT"
|
|
|
|
nvme connect -t rdma -n "nqn.2016-06.io.spdk:cnode1" -a "$NVMF_FIRST_TARGET_IP" -s "$NVMF_PORT"
|
|
|
|
waitforblk "nvme0n1"
|
|
waitforblk "nvme0n2"
|
|
|
|
nvme list
|
|
|
|
for ctrl in /dev/nvme?; do
|
|
nvme id-ctrl $ctrl
|
|
nvme smart-log $ctrl
|
|
done
|
|
|
|
for ns in /dev/nvme?n*; do
|
|
nvme id-ns $ns
|
|
done
|
|
|
|
nvme disconnect -n "nqn.2016-06.io.spdk:cnode1" || true
|
|
nvme disconnect -n "nqn.2016-06.io.spdk:cnode2" || true
|
|
|
|
if [ -d $spdk_nvme_cli ]; then
|
|
# Test spdk/nvme-cli NVMe-oF commands: discover, connect and disconnet
|
|
cd $spdk_nvme_cli
|
|
./nvme discover -t rdma -a $NVMF_FIRST_TARGET_IP -s "$NVMF_PORT"
|
|
nvme_num_before_connection=$(nvme list |grep "/dev/nvme*"|awk '{print $1}'|wc -l)
|
|
./nvme connect -t rdma -n "nqn.2016-06.io.spdk:cnode1" -a "$NVMF_FIRST_TARGET_IP" -s "$NVMF_PORT"
|
|
nvme_num=$(nvme list |grep "/dev/nvme*"|awk '{print $1}'|wc -l)
|
|
./nvme disconnect -n "nqn.2016-06.io.spdk:cnode1"
|
|
sed -i 's/spdk=1/spdk=0/g' spdk.conf
|
|
sed -i 's/shm_id=0/shm_id=1/g' spdk.conf
|
|
if [ $nvme_num -le $nvme_num_before_connection ]; then
|
|
echo "spdk/nvme-cli connect target devices failed"
|
|
kill SIGINT
|
|
fi
|
|
fi
|
|
|
|
$rpc_py delete_nvmf_subsystem nqn.2016-06.io.spdk:cnode1
|
|
trap - SIGINT SIGTERM EXIT
|
|
|
|
nvmfcleanup
|
|
killprocess $nvmfpid
|
|
timing_exit nvme_cli
|