Skip to content

Commit 0e74c50

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

File tree

3 files changed

+80
-0
lines changed

3 files changed

+80
-0
lines changed

tests/nvme/064

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
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+
}
18+
19+
device_requires() {
20+
_require_nvme_support_ns_mgt
21+
}
22+
23+
test_device() {
24+
echo "Running ${TEST_NAME}"
25+
26+
local ns_dev ctrl_dev nn tnvmcap lbaf lbads cntlid
27+
28+
ns_dev=${TEST_DEV##*/}
29+
ctrl_dev=${ns_dev%n*}
30+
nn=$(nvme id-ctrl /dev/"$ctrl_dev" | grep ^nn | awk '{ print $3}')
31+
tnvmcap=$(nvme id-ctrl /dev/"$ctrl_dev" | grep tnvmcap | awk '{ print $3}')
32+
lbaf=$(nvme id-ns "$TEST_DEV" | grep 'in use' | awk '{ print $2}')
33+
lbads=$(nvme id-ns -H "$TEST_DEV" | grep 'in use' | awk '{ print $12}')
34+
cntlid=$(nvme id-ctrl /dev/"$ctrl_dev" | grep ^cntlid | awk '{ print $3}')
35+
ns=$((tnvmcap/nn))
36+
tnsze=$((tnvmcap/lbads))
37+
nsze=$((ns/lbads))
38+
nid=1
39+
40+
# Delete the namespace
41+
nvme delete-ns "$TEST_DEV" >>"${FULL}" 2>&1
42+
while [ "$nid" -lt "$nn" ]; do
43+
nvme create-ns /dev/"$ctrl_dev" --nsze="$nsze" --ncap="$nsze" --flbas="$lbaf" >>"${FULL}" 2>&1
44+
nvme attach-ns /dev/"$ctrl_dev" --namespace-id="$nid" --controllers="$cntlid" >>"${FULL}" 2>&1
45+
((nid++))
46+
done
47+
# Create the $nn namespace
48+
unvmcap=$(nvme id-ctrl /dev/"$ctrl_dev" | grep unvmcap | awk '{ print $3}')
49+
nsze=$((unvmcap/lbads))
50+
nvme create-ns /dev/"$ctrl_dev" --nsze="$nsze" --ncap="$nsze" --flbas="$lbaf" >>"${FULL}" 2>&1
51+
nvme attach-ns /dev/"$ctrl_dev" --namespace-id="$nid" --controllers="$cntlid" >>"${FULL}" 2>&1
52+
53+
# Delete all the namespace created
54+
for ns in $(seq 1 "$nn"); do
55+
nvme delete-ns /dev/"$ctrl_dev"n"$ns" >>"${FULL}" 2>&1
56+
done
57+
58+
# Create the namespace with all the size
59+
nvme create-ns /dev/"$ctrl_dev" --nsze="$tnsze" --ncap="$tnsze" --flbas="$lbaf" >>"${FULL}" 2>&1
60+
nvme attach-ns /dev/"$ctrl_dev" --namespace-id=1 --controllers="$cntlid" >>"${FULL}" 2>&1
61+
62+
udevadm settle
63+
64+
echo "Test complete"
65+
}

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)