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>
This commit is contained in:
parent
a18050e8d6
commit
685dfa0ade
@ -118,3 +118,46 @@ get_active_lbaf() {
|
|||||||
done
|
done
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get_oacs() {
|
||||||
|
local ctrl=${1:-nvme0} bit=${2:-nsmgt}
|
||||||
|
local -A bits
|
||||||
|
|
||||||
|
# Figure 275: Identify – Identify Controller Data Structure, I/O Command Set Independent
|
||||||
|
bits["ss/sr"]=$((1 << 0))
|
||||||
|
bits["fnvme"]=$((1 << 1))
|
||||||
|
bits["fc/fi"]=$((1 << 2))
|
||||||
|
bits["nsmgt"]=$((1 << 3))
|
||||||
|
bits["self-test"]=$((1 << 4))
|
||||||
|
bits["directives"]=$((1 << 5))
|
||||||
|
bits["nvme-mi-s/r"]=$((1 << 6))
|
||||||
|
bits["virtmgt"]=$((1 << 7))
|
||||||
|
bits["doorbellbuf"]=$((1 << 8))
|
||||||
|
bits["getlba"]=$((1 << 9))
|
||||||
|
bits["commfeatlock"]=$((1 << 10))
|
||||||
|
|
||||||
|
bit=${bit,,}
|
||||||
|
[[ -n ${bits["$bit"]} ]] || return 1
|
||||||
|
|
||||||
|
(($(get_nvme_ctrl_feature "$ctrl" oacs) & bits["$bit"]))
|
||||||
|
}
|
||||||
|
|
||||||
|
get_nvmes_with_ns_management() {
|
||||||
|
((${#ctrls[@]} == 0)) && scan_nvme_ctrls
|
||||||
|
|
||||||
|
local ctrl
|
||||||
|
for ctrl in "${!ctrls[@]}"; do
|
||||||
|
get_oacs "$ctrl" nsmgt && echo "$ctrl"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
get_nvme_with_ns_management() {
|
||||||
|
local _ctrls
|
||||||
|
|
||||||
|
_ctrls=($(get_nvmes_with_ns_management))
|
||||||
|
if ((${#_ctrls[@]} > 0)); then
|
||||||
|
echo "${_ctrls[0]}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
@ -11,12 +11,7 @@ $rootdir/scripts/setup.sh reset
|
|||||||
scan_nvme_ctrls
|
scan_nvme_ctrls
|
||||||
|
|
||||||
# Find bdf that supports Namespace Management
|
# Find bdf that supports Namespace Management
|
||||||
for ctrl in "${!ctrls[@]}"; do
|
if ! nvme_name=$(get_nvme_with_ns_management); then
|
||||||
# Check Optional Admin Command Support for Namespace Management
|
|
||||||
(($(get_nvme_ctrl_feature "$ctrl" oacs) & 0x8)) && nvme_name=$ctrl && break
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ -z $nvme_name ]]; then
|
|
||||||
echo "No NVMe device supporting Namespace management found"
|
echo "No NVMe device supporting Namespace management found"
|
||||||
$rootdir/scripts/setup.sh
|
$rootdir/scripts/setup.sh
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -5,8 +5,7 @@
|
|||||||
#
|
#
|
||||||
testdir=$(readlink -f $(dirname $0))
|
testdir=$(readlink -f $(dirname $0))
|
||||||
rootdir=$(readlink -f $testdir/../../..)
|
rootdir=$(readlink -f $testdir/../../..)
|
||||||
source $rootdir/scripts/common.sh
|
source "$testdir/common.sh"
|
||||||
source $rootdir/test/common/autotest_common.sh
|
|
||||||
|
|
||||||
rm -Rf $testdir/match_files
|
rm -Rf $testdir/match_files
|
||||||
mkdir $testdir/match_files
|
mkdir $testdir/match_files
|
||||||
@ -17,17 +16,17 @@ CUSE_OUT=$testdir/match_files/cuse.out
|
|||||||
NVME_CMD=/usr/local/src/nvme-cli/nvme
|
NVME_CMD=/usr/local/src/nvme-cli/nvme
|
||||||
rpc_py=$rootdir/scripts/rpc.py
|
rpc_py=$rootdir/scripts/rpc.py
|
||||||
|
|
||||||
bdf=$(get_first_nvme_bdf)
|
"$rootdir/scripts/setup.sh" reset
|
||||||
|
scan_nvme_ctrls
|
||||||
|
|
||||||
PCI_ALLOWED="${bdf}" $rootdir/scripts/setup.sh reset
|
if ! nvme_name=$(get_nvme_with_ns_management); then
|
||||||
nvme_name=$(get_nvme_ctrlr_from_bdf ${bdf})
|
echo "Failed to find suitable nvme for the test" >&2
|
||||||
if [[ -z "$nvme_name" ]]; then
|
|
||||||
echo "setup.sh failed bind kernel driver to ${bdf}"
|
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ctrlr="/dev/${nvme_name}"
|
ctrlr="/dev/${nvme_name}"
|
||||||
ns="/dev/${nvme_name}n1"
|
ns="/dev/${nvme_name}n1"
|
||||||
|
bdf=${bdfs["$nvme_name"]}
|
||||||
|
|
||||||
waitforblk "${nvme_name}n1"
|
waitforblk "${nvme_name}n1"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user