Spdk/test/nvme/cuse/nvme_ns_manage_cuse.sh
Michal Berger 685dfa0ade test/nvme/cuse: Create common wrapper around OACS
Use it in the nvme_cli_cuse to make sure proper drive was selected
for the test (i.e. supporting ns management) - some of the nvmes
installed in the CI pool don't support ns management, hence all
related commands fail as part of these tests.

Signed-off-by: Michal Berger <michal.berger@intel.com>
Change-Id: Ib93933d7ee9b0d2eb283313d3f2bbb6f4af727a4
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/17079
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com>
2023-03-22 07:09:37 +00:00

126 lines
3.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# SPDX-License-Identifier: BSD-3-Clause
# Copyright (C) 2020 Intel Corporation
# All rights reserved.
#
testdir=$(readlink -f $(dirname $0))
rootdir=$(readlink -f $testdir/../../..)
source "$testdir/common.sh"
$rootdir/scripts/setup.sh reset
scan_nvme_ctrls
# Find bdf that supports Namespace Management
if ! nvme_name=$(get_nvme_with_ns_management); then
echo "No NVMe device supporting Namespace management found"
$rootdir/scripts/setup.sh
exit 1
fi
nvme_dev=/dev/${nvme_name}
bdf=${bdfs["$nvme_name"]}
nsids=($(get_nvme_nss "$nvme_name"))
# Detect supported features and configuration
oaes=$(get_nvme_ctrl_feature "$nvme_name" oaes)
aer_ns_change=$((oaes & 0x100))
cntlid=$(get_nvme_ctrl_feature "$nvme_name")
function reset_nvme_if_aer_unsupported() {
if [[ "$aer_ns_change" -eq "0" ]]; then
sleep 1
$NVME_CMD reset "$1" || true
fi
}
function remove_all_namespaces() {
info_print "delete all namespaces"
# Cant globally detach all namespaces ... must do so one by one
for nsid in "${nsids[@]}"; do
info_print "removing nsid=${nsid}"
$NVME_CMD detach-ns ${nvme_dev} -n ${nsid} -c ${cntlid} || true
$NVME_CMD delete-ns ${nvme_dev} -n ${nsid} || true
done
}
function clean_up() {
"$rootdir/scripts/setup.sh" reset
remove_all_namespaces
echo "Restoring $nvme_dev..."
for nsid in "${nsids[@]}"; do
ncap=$(get_nvme_ns_feature "$nvme_name" "$nsid" ncap)
nsze=$(get_nvme_ns_feature "$nvme_name" "$nsid" nsze)
lbaf=$(get_active_lbaf "$nvme_name" "$nsid")
$NVME_CMD create-ns ${nvme_dev} -s ${nsze} -c ${ncap} -f ${lbaf}
$NVME_CMD attach-ns ${nvme_dev} -n ${nsid} -c ${cntlid}
$NVME_CMD reset ${nvme_dev}
done
$rootdir/scripts/setup.sh
}
function info_print() {
echo "---"
echo "$@"
echo "---"
}
# Prepare controller
remove_all_namespaces
reset_nvme_if_aer_unsupported ${nvme_dev}
sleep 1
PCI_ALLOWED="${bdf}" $rootdir/scripts/setup.sh
$SPDK_BIN_DIR/spdk_tgt -m 0x3 &
spdk_tgt_pid=$!
trap 'kill -9 ${spdk_tgt_pid}; clean_up; exit 1' SIGINT SIGTERM EXIT
waitforlisten $spdk_tgt_pid
$rpc_py bdev_nvme_attach_controller -b Nvme0 -t PCIe -a ${bdf}
$rpc_py bdev_nvme_cuse_register -n Nvme0
ctrlr="/dev/spdk/nvme0"
sleep 1
[[ -c $ctrlr ]]
for dev in "${ctrlr}"n*; do
[[ ! -c ${dev} ]]
done
sleep 1
for nsid in "${nsids[@]}"; do
info_print "create ns: nsze=10000 ncap=10000 flbias=0"
$NVME_CMD create-ns ${ctrlr} -s 10000 -c 10000 -f 0
info_print "attach ns: nsid=${nsid} controller=${cntlid}"
$NVME_CMD attach-ns ${ctrlr} -n ${nsid} -c ${cntlid}
reset_nvme_if_aer_unsupported ${ctrlr}
sleep 1
[[ -c "${ctrlr}n${nsid}" ]]
info_print "detach ns: nsid=${nsid} controller=${cntlid}"
$NVME_CMD detach-ns ${ctrlr} -n ${nsid} -c ${cntlid}
info_print "delete ns: nsid=${nsid}"
$NVME_CMD delete-ns ${ctrlr} -n ${nsid}
reset_nvme_if_aer_unsupported ${ctrlr}
sleep 1
[[ ! -c "${ctrlr}n${nsid}" ]]
done
# Here we should not have any cuse devices
for dev in "${ctrlr}"n*; do
[[ ! -c ${dev} ]]
done
$rpc_py bdev_nvme_detach_controller Nvme0
sleep 1
[[ ! -c ${ctrlr} ]]
trap - SIGINT SIGTERM EXIT
killprocess $spdk_tgt_pid
clean_up