On 09/05/2019 10:44 AM, Logan Gunthorpe wrote:
> A number of bug fixes have been submitted to the kernel to
> fix bugs when a controller is removed immediately after it is
> set up. This new test ensures this doesn't regress.
>
> Signed-off-by: Logan Gunthorpe <[email protected]>
>
> ---
>
> This is reallly just a resend. The patches this tests for are all in
> 5.3-rc7 or earlier and it passes on said kernel version.
>
> I've rebased this patch onto the latest blktests as of today with no
> changes required.
>
> Thanks,
>
> Logan
>
> tests/nvme/031 | 55 ++++++++++++++++++++++++++++++++++++++++++++++
> tests/nvme/031.out | 2 ++
> 2 files changed, 57 insertions(+)
> create mode 100755 tests/nvme/031
> create mode 100644 tests/nvme/031.out
>
> diff --git a/tests/nvme/031 b/tests/nvme/031
> new file mode 100755
> index 000000000000..16390dcb380e
> --- /dev/null
> +++ b/tests/nvme/031
> @@ -0,0 +1,55 @@
> +#!/bin/bash
> +# SPDX-License-Identifier: GPL-3.0+
> +# Copyright (C) 2019 Logan Gunthorpe
> +#
> +# Regression test for the following patches:
> +# nvme: fix controller removal race with scan work
> +# nvme: fix regression upon hot device removal and insertion
> +# nvme-core: Fix extra device_put() call on error path
> +# nvmet-loop: Flush nvme_delete_wq when removing the port
> +# nvmet: Fix use-after-free bug when a port is removed
> +#
> +# All these patches fix issues related to deleting a controller
> +# immediately after setting it up.
> +
> +. tests/nvme/rc
> +
> +DESCRIPTION="test deletion of NVMeOF controllers immediately after setup"
> +QUICK=1
> +
> +requires() {
> + _have_program nvme &&
> + _have_modules loop nvme-loop nvmet &&
> + _have_configfs
> +}
> +
> +test() {
> + local subsys="blktests-subsystem-"
> + local iterations=10
> + local loop_dev
> + local port
> +
> + echo "Running ${TEST_NAME}"
> +
> + _setup_nvmet
> +
> + truncate -s 1G "$TMPDIR/img"
> +
> + local loop_dev
Duplicate declaration of the local variable ?
> + loop_dev="$(losetup -f --show "$TMPDIR/img")"
> +
> + port="$(_create_nvmet_port "loop")"
> +
> + for ((i = 0; i < iterations; i++)); do
> + _create_nvmet_subsystem "${subsys}$i" "${loop_dev}"
> + _add_nvmet_subsys_to_port "${port}" "${subsys}$i"
> + nvme connect -t loop -n "${subsys}$i"
> + nvme disconnect -n "${subsys}$i" >> "${FULL}" 2>&1
> + _remove_nvmet_subsystem_from_port "${port}" "${subsys}$i"
> + _remove_nvmet_subsystem "${subsys}$i"
> + done
> +
> + _remove_nvmet_port "${port}"
> +
> + echo "Test complete"
> +}
> diff --git a/tests/nvme/031.out b/tests/nvme/031.out
> new file mode 100644
> index 000000000000..ae902bdd36d4
> --- /dev/null
> +++ b/tests/nvme/031.out
> @@ -0,0 +1,2 @@
> +Running nvme/031
> +Test complete
> --
> 2.20.1
>
> _______________________________________________
> Linux-nvme mailing list
> [email protected]
> http://lists.infradead.org/mailman/listinfo/linux-nvme
>