Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions tests/nvme/064
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#!/bin/bash
# SPDX-License-Identifier: GPL-3.0+
# Copyright (C) 2025 Yi Zhang <[email protected]>
#
# Test NVMe disk namespace management
#

. tests/nvme/rc

DESCRIPTION="Test NVMe disk namespace management"
QUICK=1
CAN_BE_ZONED=1

requires() {
_nvme_requires
_have_fio
_have_program jq
}

device_requires() {
_require_nvme_support_ns_mgt
}

test_device() {
echo "Running ${TEST_NAME}"

local ns_dev ctrl_dev nn tnvmcap lbaf lbads cntlid

ns_dev=${TEST_DEV##*/}
ctrl_dev=${ns_dev%n*}
nn=$(nvme id-ctrl --output-format=json /dev/"$ctrl_dev" | jq '.nn')
tnvmcap=$(nvme id-ctrl --output-format=json /dev/"$ctrl_dev" | jq '.tnvmcap')
flbas=$(nvme id-ns --output-format=json "$TEST_DEV" | jq '.flbas')
ds=$(nvme id-ns --output-format=json "$TEST_DEV" | jq ".lbafs[$flbas].ds")
lbads=$((2**ds))
cntlid=$(nvme id-ctrl --output-format=json /dev/"$ctrl_dev" | jq '.cntlid')
ns=$((tnvmcap/nn))
tnsze=$((tnvmcap/lbads))
nsze=$((ns/lbads))
nid=1

# Delete the namespace
nvme delete-ns "$TEST_DEV" >>"${FULL}" 2>&1
# Create nn-1 namespaces
while [ "$nid" -lt "$nn" ]; do
nvme create-ns /dev/"$ctrl_dev" --nsze="$nsze" --ncap="$nsze" --flbas="$flbas" >>"${FULL}" 2>&1
nvme attach-ns /dev/"$ctrl_dev" --namespace-id="$nid" --controllers="$cntlid" >>"${FULL}" 2>&1
((nid++))
done
# Create the $nn namespace
unvmcap=$(nvme id-ctrl --output-format=json /dev/"$ctrl_dev" | jq '.tnvmcap')
nsze=$((unvmcap/lbads))
nvme create-ns /dev/"$ctrl_dev" --nsze="$nsze" --ncap="$nsze" --flbas="$flbas" >>"${FULL}" 2>&1
nvme attach-ns /dev/"$ctrl_dev" --namespace-id="$nid" --controllers="$cntlid" >>"${FULL}" 2>&1

# Delete all the namespace created
for ns in $(seq 1 "$nn"); do
nvme delete-ns /dev/"$ctrl_dev"n"$ns" >>"${FULL}" 2>&1
done

# Create the namespace with all the size
nvme create-ns /dev/"$ctrl_dev" --nsze="$tnsze" --ncap="$tnsze" --flbas="$flbas" >>"${FULL}" 2>&1
nvme attach-ns /dev/"$ctrl_dev" --namespace-id=1 --controllers="$cntlid" >>"${FULL}" 2>&1

udevadm settle

echo "Test complete"
}
2 changes: 2 additions & 0 deletions tests/nvme/064.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Running nvme/064
Test complete
13 changes: 13 additions & 0 deletions tests/nvme/rc
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,19 @@ _require_nvme_cli_tls() {
return 0
}

_require_nvme_support_ns_mgt() {
nn=$(nvme id-ctrl "$TEST_DEV" | grep ^nn | awk '{ print $3}')
if nvme id-ctrl -H "$TEST_DEV" | grep -q "NS Management and Attachment Not Supported"; then
SKIP_REASONS+=("$TEST_DEV doesn't support NS Management and Attachment")
return 1
elif [ "$nn" -eq 1 ]; then
SKIP_REASONS+=("$TEST_DEV supports NS Management and Attachmentm but nn=$nn")
return 1

fi
return 0
}

_require_kernel_nvme_fabrics_feature() {
local feature="$1"

Expand Down
Loading