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

Yi Zhang yi.zhang at redhat.com
Thu Aug 10 07:38:18 PDT 2023


On Thu, Aug 10, 2023 at 8:51 PM Shinichiro Kawasaki
<shinichiro.kawasaki at wdc.com> wrote:
>
> 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

Yeah, move to _nvme_connect_subsys looks more reasonable.

> below and see if it avoid the failure?

This change works well :)

>
> 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
>  }
>


-- 
Best Regards,
  Yi Zhang




More information about the Linux-nvme mailing list