|
| 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 | +} |
0 commit comments