[bug report] blktests nvme/047 failed due to /dev/nvme0n1 not created in time

Shinichiro Kawasaki shinichiro.kawasaki at wdc.com
Thu Aug 10 05:51:45 PDT 2023


On Aug 10, 2023 / 18:21, Yi Zhang wrote:
> Hi Daniel/Shinichiro
> Thanks for looking into this issue, I checked the 047 code, and we are
> missing _find_nvme_dev after the second connect, and the below change
> could fix this issue now.
> 
> diff --git a/tests/nvme/047 b/tests/nvme/047
> index 6a7599b..8c0a024 100755
> --- a/tests/nvme/047
> +++ b/tests/nvme/047
> @@ -52,6 +52,8 @@ test() {
>                 --nr-write-queues 1 \
>                 --nr-poll-queues 1 || echo FAIL
> 
> +       nvmedev=$(_find_nvme_dev "${subsys_name}")
> +
>         _run_fio_rand_io --filename="/dev/${nvmedev}n1" --size="${rand_io_size}"
> 
>         _nvme_disconnect_subsys "${subsys_name}" >> "$FULL" 2>&1
> 
> 

Ah, I overlooked that the test case calls _nvme_connect_subsys twice. Good to
know that the above changes avoid the failure.

Having said that, the fix above does not look the best. As discussed in another
e-mail, _find_nvme_dev() just does 1 second wait, and it actually does not check
readiness of the device. This needs fix. Also I think the check and wait should
move from _find_nvme_dev()to _nvme_connect_subsys(). Could you try the patch
below and see if it avoid the failure?

diff --git a/tests/nvme/rc b/tests/nvme/rc
index 4f3a994..d09e7b4 100644
--- a/tests/nvme/rc
+++ b/tests/nvme/rc
@@ -425,6 +425,7 @@ _nvme_connect_subsys() {
 	local keep_alive_tmo=""
 	local reconnect_delay=""
 	local ctrl_loss_tmo=""
+	local dev i
 
 	while [[ $# -gt 0 ]]; do
 		case $1 in
@@ -529,6 +530,16 @@ _nvme_connect_subsys() {
 	fi
 
 	nvme connect "${ARGS[@]}" 2> /dev/null
+
+	dev=$(_find_nvme_dev "$subsysnqn")
+	for ((i = 0; i < 10; i++)); do
+		if [[ -b /dev/${dev}n1 &&
+			      -e /sys/block/${dev}n1/uuid &&
+			      -e /sys/block/${dev}n1/wwid ]]; then
+			return
+		fi
+		sleep .1
+	done
 }
 
 _nvme_discover() {
@@ -739,13 +750,6 @@ _find_nvme_dev() {
 		subsysnqn="$(cat "/sys/class/nvme/${dev}/subsysnqn")"
 		if [[ "$subsysnqn" == "$subsys" ]]; then
 			echo "$dev"
-			for ((i = 0; i < 10; i++)); do
-				if [[ -e /sys/block/$dev/uuid &&
-					-e /sys/block/$dev/wwid ]]; then
-					return
-				fi
-				sleep .1
-			done
 		fi
 	done
 }



More information about the Linux-nvme mailing list