This is regression test for commit be647e2c76b2 (nvme: use srcu for iterating namespace list) This test uses a regulare file backed loop device for creating and then deleting an NVMe namespace in a loop. Signed-off-by: Nilay Shroff <nilay@xxxxxxxxxxxxx> --- This regression was first reported[1], and now it's fixed in 6.10-rc4[2] [1] https://lore.kernel.org/all/2312e6c3-a069-4388-a863-df7e261b9d70@xxxxxxxxxxxxxxxxxx/ [2] commit ff0ffe5b7c3c (nvme: fix namespace removal list) --- tests/nvme/051 | 65 ++++++++++++++++++++++++++++++++++++++++++++++ tests/nvme/051.out | 2 ++ 2 files changed, 67 insertions(+) create mode 100755 tests/nvme/051 create mode 100644 tests/nvme/051.out diff --git a/tests/nvme/051 b/tests/nvme/051 new file mode 100755 index 0000000..0de5c56 --- /dev/null +++ b/tests/nvme/051 @@ -0,0 +1,65 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-3.0+ +# Copyright (C) 2024 Nilay Shroff(nilay@xxxxxxxxxxxxx) +# +# Regression test for commit be647e2c76b2(nvme: use srcu for iterating +# namespace list) + +. tests/nvme/rc + +DESCRIPTION="Test file-ns creation/deletion under one subsystem" + +requires() { + _nvme_requires + _have_loop + _require_nvme_trtype_is_loop +} + +set_conditions() { + _set_nvme_trtype "$@" +} + +test() { + echo "Running ${TEST_NAME}" + + _setup_nvmet + + local subsys="blktests-subsystem-1" + local iterations="${NVME_NUM_ITER}" + local loop_dev + local port + + truncate -s "${NVME_IMG_SIZE}" "$(_nvme_def_file_path)" + + loop_dev="$(losetup -f --show "$(_nvme_def_file_path)")" + + port="$(_create_nvmet_port "${nvme_trtype}")" + + _nvmet_target_setup --subsysnqn "${subsys}" --blkdev "${loop_dev}" + + _nvme_connect_subsys --subsysnqn "${subsys}" + + for ((i = 2; i <= iterations; i++)); do { + truncate -s "${NVME_IMG_SIZE}" "$(_nvme_def_file_path).$i" + _create_nvmet_ns "${subsys}" "${i}" "$(_nvme_def_file_path).$i" + + # allow async request to be processed + sleep 1 + + _remove_nvmet_ns "${subsys}" "${i}" + rm "$(_nvme_def_file_path).$i" + } + done + + _nvme_disconnect_subsys --subsysnqn "${subsys}" >> "${FULL}" 2>&1 + + _nvmet_target_cleanup --subsysnqn "${subsys}" --blkdev "${loop_dev}" + + _remove_nvmet_port "${port}" + + losetup -d "$loop_dev" + + rm "$(_nvme_def_file_path)" + + echo "Test complete" +} diff --git a/tests/nvme/051.out b/tests/nvme/051.out new file mode 100644 index 0000000..156f068 --- /dev/null +++ b/tests/nvme/051.out @@ -0,0 +1,2 @@ +Running nvme/051 +Test complete -- 2.45.1