Skip to content

Commit acc1829

Browse files
committed
add new case for NVMe namespace management
Signed-off-by: Yi Zhang <[email protected]>
1 parent 26f5445 commit acc1829

3 files changed

Lines changed: 83 additions & 0 deletions

File tree

tests/nvme/064

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
#!/bin/bash
2+
# SPDX-License-Identifier: GPL-3.0+
3+
# Copyright (C) 2025 Yi Zhang <[email protected]>
4+
#
5+
# Test NVMe disk namespace management
6+
#
7+
8+
. tests/nvme/rc
9+
10+
DESCRIPTION="Test NVMe disk namespace management"
11+
QUICK=1
12+
CAN_BE_ZONED=1
13+
14+
requires() {
15+
_nvme_requires
16+
_have_fio
17+
_have_program jq
18+
}
19+
20+
device_requires() {
21+
_require_nvme_support_ns_mgt
22+
}
23+
24+
test_device() {
25+
echo "Running ${TEST_NAME}"
26+
27+
local ns_dev ctrl_dev nn tnvmcap lbaf lbads cntlid
28+
29+
ns_dev=${TEST_DEV##*/}
30+
ctrl_dev=${ns_dev%n*}
31+
nn=$(nvme id-ctrl --output-format=json /dev/"$ctrl_dev" | jq '.nn')
32+
tnvmcap=$(nvme id-ctrl --output-format=json /dev/"$ctrl_dev" | jq '.tnvmcap')
33+
flbas=$(nvme id-ns --output-format=json "$TEST_DEV" | jq '.flbas')
34+
ds=$(nvme id-ns --output-format=json "$TEST_DEV" | jq ".lbafs[$flbas].ds")
35+
lbads=$((2**ds))
36+
cntlid=$(nvme id-ctrl --output-format=json /dev/"$ctrl_dev" | jq '.cntlid')
37+
ns=$((tnvmcap/nn))
38+
tnsze=$((tnvmcap/lbads))
39+
nsze=$((ns/lbads))
40+
nid=1
41+
42+
# Delete the namespace
43+
nvme delete-ns "$TEST_DEV" >>"${FULL}" 2>&1
44+
# Create nn-1 namespaces
45+
while [ "$nid" -lt "$nn" ]; do
46+
nvme create-ns /dev/"$ctrl_dev" --nsze="$nsze" --ncap="$nsze" --flbas="$flbas" >>"${FULL}" 2>&1
47+
nvme attach-ns /dev/"$ctrl_dev" --namespace-id="$nid" --controllers="$cntlid" >>"${FULL}" 2>&1
48+
((nid++))
49+
done
50+
# Create the $nn namespace
51+
unvmcap=$(nvme id-ctrl --output-format=json /dev/"$ctrl_dev" | jq '.tnvmcap')
52+
nsze=$((unvmcap/lbads))
53+
nvme create-ns /dev/"$ctrl_dev" --nsze="$nsze" --ncap="$nsze" --flbas="$flbas" >>"${FULL}" 2>&1
54+
nvme attach-ns /dev/"$ctrl_dev" --namespace-id="$nid" --controllers="$cntlid" >>"${FULL}" 2>&1
55+
56+
# Delete all the namespace created
57+
for ns in $(seq 1 "$nn"); do
58+
nvme delete-ns /dev/"$ctrl_dev"n"$ns" >>"${FULL}" 2>&1
59+
done
60+
61+
# Create the namespace with all the size
62+
nvme create-ns /dev/"$ctrl_dev" --nsze="$tnsze" --ncap="$tnsze" --flbas="$flbas" >>"${FULL}" 2>&1
63+
nvme attach-ns /dev/"$ctrl_dev" --namespace-id=1 --controllers="$cntlid" >>"${FULL}" 2>&1
64+
65+
udevadm settle
66+
67+
echo "Test complete"
68+
}

tests/nvme/064.out

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Running nvme/064
2+
Test complete

tests/nvme/rc

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,19 @@ _require_nvme_cli_tls() {
183183
return 0
184184
}
185185

186+
_require_nvme_support_ns_mgt() {
187+
nn=$(nvme id-ctrl "$TEST_DEV" | grep ^nn | awk '{ print $3}')
188+
if nvme id-ctrl -H "$TEST_DEV" | grep -q "NS Management and Attachment Not Supported"; then
189+
SKIP_REASONS+=("$TEST_DEV doesn't support NS Management and Attachment")
190+
return 1
191+
elif [ "$nn" -eq 1 ]; then
192+
SKIP_REASONS+=("$TEST_DEV supports NS Management and Attachmentm but nn=$nn")
193+
return 1
194+
195+
fi
196+
return 0
197+
}
198+
186199
_require_kernel_nvme_fabrics_feature() {
187200
local feature="$1"
188201

0 commit comments

Comments
 (0)