@@ -452,32 +452,95 @@ _remove_nvmet_port() {
}
_create_nvmet_ns() {
- local nvmet_subsystem="$1"
- local nsid="$2"
- local blkdev="$3"
+ local nvmet_subsystem=""
+ local nsid=""
+ local blkdev=""
local uuid="00000000-0000-0000-0000-000000000000"
- local subsys_path="${NVMET_CFS}/subsystems/${nvmet_subsystem}"
- local ns_path="${subsys_path}/namespaces/${nsid}"
+ local subsys_path=""
+ local ns_path=""
+ local resv_enable=false
- if [[ $# -eq 4 ]]; then
- uuid="$4"
- fi
+ while [[ $# -gt 0 ]]; do
+ case $1 in
+ --subsysnqn)
+ nvmet_subsystem="$2"
+ shift 2
+ ;;
+ --nsid)
+ nsid="$2"
+ shift 2
+ ;;
+ --blkdev)
+ blkdev="$2"
+ shift 2
+ ;;
+ --uuid)
+ uuid="$2"
+ shift 2
+ ;;
+ --resv_enable)
+ resv_enable=true
+ shift 1
+ ;;
+ *)
+ echo "WARNING: unknown argument: $1"
+ shift
+ ;;
+ esac
+ done
+
+ subsys_path="${NVMET_CFS}/subsystems/${nvmet_subsystem}"
+ ns_path="${subsys_path}/namespaces/${nsid}"
mkdir "${ns_path}"
printf "%s" "${blkdev}" > "${ns_path}/device_path"
printf "%s" "${uuid}" > "${ns_path}/device_uuid"
+ if [[ -f "${ns_path}/resv_enable" && "${resv_enable}" = true ]] ; then
+ printf 1 > "${ns_path}/resv_enable"
+ fi
printf 1 > "${ns_path}/enable"
}
_create_nvmet_subsystem() {
- local nvmet_subsystem="$1"
- local blkdev="$2"
- local uuid=$3
- local cfs_path="${NVMET_CFS}/subsystems/${nvmet_subsystem}"
+ local nvmet_subsystem=""
+ local blkdev=""
+ local uuid="00000000-0000-0000-0000-000000000000"
+ local resv_enable=""
+ local cfs_path=""
+
+ while [[ $# -gt 0 ]]; do
+ case $1 in
+ --subsysnqn)
+ nvmet_subsystem="$2"
+ shift 2
+ ;;
+ --blkdev)
+ blkdev="$2"
+ shift 2
+ ;;
+ --uuid)
+ uuid="$2"
+ shift 2
+ ;;
+ --resv_enable)
+ resv_enable="--resv_enable";
+ shift 1
+ ;;
+ *)
+ echo "WARNING: unknown argument: $1"
+ shift
+ ;;
+ esac
+ done
+ cfs_path="${NVMET_CFS}/subsystems/${nvmet_subsystem}"
mkdir -p "${cfs_path}"
echo 0 > "${cfs_path}/attr_allow_any_host"
- _create_nvmet_ns "${nvmet_subsystem}" "1" "${blkdev}" "${uuid}"
+ _create_nvmet_ns --subsysnqn "${nvmet_subsystem}" \
+ --nsid "1" \
+ --blkdev "${blkdev}" \
+ --uuid "${uuid}" \
+ ${resv_enable}
}
_add_nvmet_allow_hosts() {
@@ -52,7 +52,9 @@ setup_nvme_over_tcp() {
local port
port="$(_create_nvmet_port "${nvme_trtype}")"
- _create_nvmet_subsystem "${def_subsysnqn}" "/dev/mapper/ram0_big_optio" "${def_subsys_uuid}"
+ _create_nvmet_subsystem --subsysnqn "${def_subsysnqn}" \
+ --blkdev "/dev/mapper/ram0_big_optio" \
+ --uuid "${def_subsys_uuid}"
_add_nvmet_subsys_to_port "${port}" "${def_subsysnqn}"
_create_nvmet_host "${def_subsysnqn}" "${def_hostnqn}"
@@ -34,7 +34,8 @@ test() {
local genctr=1
for ((i = 0; i < iterations; i++)); do
- _create_nvmet_subsystem "blktests-subsystem-$i" "${loop_dev}"
+ _create_nvmet_subsystem --subsysnqn "blktests-subsystem-$i" \
+ --blkdev "${loop_dev}"
_add_nvmet_subsys_to_port "${port}" "blktests-subsystem-$i"
done
@@ -29,10 +29,13 @@ test() {
loop_dev="$(losetup -f)"
local genctr=1
- _create_nvmet_subsystem "${def_subsysnqn}" "${loop_dev}"
+ _create_nvmet_subsystem --subsysnqn "${def_subsysnqn}" \
+ --blkdev "${loop_dev}"
for ((i = 2; i <= iterations; i++)); do
- _create_nvmet_ns "${def_subsysnqn}" "${i}" "${loop_dev}"
+ _create_nvmet_ns --subsysnqn "${def_subsysnqn}" \
+ --nsid "${i}" \
+ --blkdev "${loop_dev}"
done
port="$(_create_nvmet_port "${nvme_trtype}")"
@@ -29,12 +29,14 @@ test() {
local genctr=1
- _create_nvmet_subsystem "${def_subsysnqn}" "$(_nvme_def_file_path)" \
- "${def_subsys_uuid}"
+ _create_nvmet_subsystem --subsysnqn "${def_subsysnqn}" \
+ --blkdev "$(_nvme_def_file_path)" \
+ --uuid "${def_subsys_uuid}"
for ((i = 2; i <= iterations; i++)); do
- _create_nvmet_ns "${def_subsysnqn}" "${i}" \
- "$(_nvme_def_file_path)"
+ _create_nvmet_ns --subsysnqn "${def_subsysnqn}" \
+ --nsid "${i}" \
+ --blkdev "$(_nvme_def_file_path)"
done
port="$(_create_nvmet_port "${nvme_trtype}")"
@@ -30,13 +30,15 @@ test() {
port="$(_create_nvmet_port "${nvme_trtype}")"
- _create_nvmet_subsystem "${subsys}1" "$(losetup -f)"
+ _create_nvmet_subsystem --subsysnqn "${subsys}1" \
+ --blkdev "$(losetup -f)"
_add_nvmet_subsys_to_port "${port}" "${subsys}1"
_create_nvmet_host "${subsys}1" "${def_hostnqn}"
genctr=$(_discovery_genctr)
- _create_nvmet_subsystem "${subsys}2" "$(losetup -f)"
+ _create_nvmet_subsystem --subsysnqn "${subsys}2" \
+ --blkdev "$(losetup -f)"
_add_nvmet_subsys_to_port "${port}" "${subsys}2"
genctr=$(_check_genctr "${genctr}" "adding a subsystem to a port")
@@ -64,7 +64,10 @@ test() {
truncate -s "${NVME_IMG_SIZE}" "$(_nvme_def_file_path).$i"
uuid="$(uuidgen -r)"
- _create_nvmet_ns "${def_subsysnqn}" "${i}" "$(_nvme_def_file_path).$i" "${uuid}"
+ _create_nvmet_ns --subsysnqn "${def_subsysnqn}" \
+ --nsid "${i}" \
+ --blkdev "$(_nvme_def_file_path).$i" \
+ --uuid "${uuid}"
# wait until async request is processed and ns is created
if ! nvmf_wait_for_ns "${uuid}" created; then
@@ -324,6 +324,7 @@ _nvmet_target_setup() {
local subsysnqn="${def_subsysnqn}"
local subsys_uuid="${def_subsys_uuid}"
local port
+ local resv_enable=""
while [[ $# -gt 0 ]]; do
case $1 in
@@ -347,6 +348,10 @@ _nvmet_target_setup() {
subsys_uuid="$2"
shift 2
;;
+ --resv_enable)
+ resv_enable="--resv_enable"
+ shift 1
+ ;;
*)
echo "WARNING: unknown argument: $1"
shift
@@ -361,8 +366,10 @@ _nvmet_target_setup() {
blkdev="$(_nvme_def_file_path)"
fi
- _create_nvmet_subsystem "${subsysnqn}" "${blkdev}" \
- "${subsys_uuid}"
+ _create_nvmet_subsystem --subsysnqn "${subsysnqn}" \
+ --blkdev "${blkdev}" \
+ --uuid "${subsys_uuid}" \
+ ${resv_enable}
port="$(_create_nvmet_port "${nvme_trtype}")"
_add_nvmet_subsys_to_port "${port}" "${subsysnqn}"
_create_nvmet_host "${subsysnqn}" "${def_hostnqn}" \
Add an optional argument --resv_enable to _nvmet_target_setup() and propagate it to _create_nvmet_subsystem() and _create_nvmet_ns(). One can call functions with --resv_enable to enable reservation feature on a specific namespace. And also make _create_nvmet_ns and _create_nvmet_subsystem to parse for arguments, this makes these functions more flexible to use. Signed-off-by: Guixin Liu <kanie@linux.alibaba.com> --- common/nvme | 89 ++++++++++++++++++++++++++++++++++++++++++-------- tests/md/001 | 4 ++- tests/nvme/002 | 3 +- tests/nvme/016 | 7 ++-- tests/nvme/017 | 10 +++--- tests/nvme/030 | 6 ++-- tests/nvme/052 | 5 ++- tests/nvme/rc | 11 +++++-- 8 files changed, 109 insertions(+), 26 deletions(-)