On Apr 08, 2025 / 18:26, Daniel Wagner wrote: > Add a new test case which forcefully removes the target and setup it > again. > > Reviewed-by: Chaitanya Kulkarni <kch@xxxxxxxxxx> > Signed-off-by: Daniel Wagner <wagi@xxxxxxxxxx> When I ran this test case for tr=loop, it fails. The out file is as follows: $ cat ./results/nodev_tr_loop/nvme/061.out.bad Running nvme/061 iteration 0 grep: /sys/class/nvme-fabrics/ctl//state: No such file or directory grep: /sys/class/nvme-fabrics/ctl//state: No such file or directory grep: /sys/class/nvme-fabrics/ctl//state: No such file or directory grep: /sys/class/nvme-fabrics/ctl//state: No such file or directory grep: /sys/class/nvme-fabrics/ctl//state: No such file or directory grep: /sys/class/nvme-fabrics/ctl//state: No such file or directory expected state "connecting" not reached within 5 seconds And kernel reported the "invalid parameter" message: [ 888.896492][ T3112] run blktests nvme/061 at 2025-04-14 21:11:18 [ 888.937128][ T3158] loop0: detected capacity change from 0 to 2097152 [ 888.949671][ T3161] nvmet: adding nsid 1 to subsystem blktests-subsystem-1 [ 888.997790][ T3170] nvme_fabrics: invalid parameter 'reconnect_delay=%d' In the v1 series, you noted that your fc-loop fixes will avoid the failure. But the failure was observed with tr=loop, so I'm not sure fc-loop fixes will avoids the failure. I'm wondering if this test case is for rdma/tcp/fc transports only and suspecting it may not be intended for the loop transport. Also, please find nit comments in line: > --- > tests/nvme/061 | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ > tests/nvme/061.out | 21 +++++++++++++++++ > 2 files changed, 87 insertions(+) > > diff --git a/tests/nvme/061 b/tests/nvme/061 > new file mode 100755 > index 0000000000000000000000000000000000000000..3b59d7137932258d06c3d64166db493df176ba4e > --- /dev/null > +++ b/tests/nvme/061 > @@ -0,0 +1,66 @@ > +#!/bin/bash > +# SPDX-License-Identifier: GPL-3.0+ > +# Copyright (C) 2025 Daniel Wagner, SUSE Labs > +# > +# Test if the host keeps running IO when the target is forcefully removed and > +# added back. > + > +. tests/nvme/rc > + > +DESCRIPTION="test fabric target teardown and setup during I/O" > +TIMED=1 > + > +requires() { > + _nvme_requires > + _have_loop > + _have_fio > + _require_nvme_trtype_is_fabrics > +} > + > +set_conditions() { > + _set_nvme_trtype "$@" > +} > + > +test() { > + echo "Running ${TEST_NAME}" > + > + _setup_nvmet > + > + local ns > + > + _nvmet_target_setup > + > + _nvme_connect_subsys --keep-alive-tmo 1 --reconnect-delay 1 > + > + ns=$(_find_nvme_ns "${def_subsys_uuid}") > + > + _run_fio_rand_io --filename="/dev/${ns}" \ > + --group_reporting \ > + --time_based --runtime=1d &> /dev/null & > + fio_pid=$! > + sleep 1 > + > + nvmedev=$(_find_nvme_dev "${def_subsysnqn}") > + state_file="/sys/class/nvme-fabrics/ctl/${nvmedev}/state" > + for ((i = 0; i <= 5; i++)); do > + echo "iteration $i" > + > + _nvmet_target_cleanup > + > + _nvmf_wait_for_state "${def_subsysnqn}" "connecting" || return 1 > + echo "state: $(cat ${state_file})" The line above needs one more pair of double quotations to avoid the shellcheck warn: echo "state: $(cat "${state_file}")" > + > + _nvmet_target_setup > + > + _nvmf_wait_for_state "${def_subsysnqn}" "live" || return 1 > + echo "state: $(cat ${state_file})" Same here: echo "state: $(cat "${state_file}")"