[PATCH v3 0/4] nvmet-fcloop: unblock module removal

From: Daniel Wagner
Date: Tue Apr 18 2023 - 09:02:23 EST


I got it somewhat working with this version here and the blktest fcloop cleanup
fix[1].

There is a BIG if though. I have to disable manually the auto connect udev rules
from the host system. I've played a bit around how to disable them during
runtime. There is a way to inject a runtime global variable into udev rules via
'udevadm control -p BLKTESTS=1'. The udev rule file can then be extended with a
rule like 'ENV{BLKTESTS}="1", GOTO=...' but I was not able to get this working
reliable. It looks like the update is not getting promotted to all udev daemon
threads. Even a 'sleep 5' or 'udevadm settle' didn't help.

The only way I found so far is to do

ln -s /dev/null /etc/udev/rules.d/70-nvmf-autoconnect.rules

which obviously sucks. IIRC, Martin B has the same issue with nvme-stats and
nvme-cli...

Anyway, it doesn't creash anymore and there are not warning from lockdep or
KASAN. The first few tests cases are passing. So the failing ones could actually
be 'real' bugs, who knows :)

# nvme_trtype=fc ./check nvme
nvme/002 (create many subsystems and test discovery) [not run]
nvme_trtype=fc is not supported in this test
nvme/003 (test if we're sending keep-alives to a discovery controller)
nvme/003 (test if we're sending keep-alives to a discovery controller) [passed]
runtime 10.277s ... 10.479srt: No such file or directory
nvme/004 (test nvme and nvmet UUID NS descriptors) [passed]
runtime 1.976s ... 1.723s
nvme/005 (reset local loopback target) [passed]
runtime 2.203s ... 1.829s
nvme/006 (create an NVMeOF target with a block device-backed ns) [passed]
runtime 0.248s ... 0.221s
nvme/007 (create an NVMeOF target with a file-backed ns) [passed]
runtime 0.156s ... 0.127s
nvme/008 (create an NVMeOF host with a block device-backed ns) [passed]
runtime 1.945s ... 1.658s
nvme/009 (create an NVMeOF host with a file-backed ns) [passed]
runtime 1.854s ... 1.711s
nvme/010 (run data verification fio job on NVMeOF block device-backed ns) [passed]
runtime 44.555s ... 41.625s
nvme/011 (run data verification fio job on NVMeOF file-backed ns) [passed]
runtime 89.795s ... 71.931s
nvme/012 (run mkfs and data verification fio job on NVMeOF block device-backed ns) [passed]
runtime 61.607s ... 49.917s
nvme/013 (run mkfs and data verification fio job on NVMeOF file-backed ns) [passed]
runtime 109.725s ... 79.189s
nvme/014 (flush a NVMeOF block device-backed ns) [passed]
runtime 7.902s ... 5.977s
nvme/015 (unit test for NVMe flush for file backed ns) [passed]
runtime 7.229s ... 5.734s
nvme/016 (create/delete many NVMeOF block device-backed ns and test discovery) [not run]
runtime 44.446s ...
nvme_trtype=fc is not supported in this test
nvme/017 (create/delete many file-ns and test discovery) [not run]
runtime 45.306s ...
nvme_trtype=fc is not supported in this test
nvme/018 (unit test NVMe-oF out of range access on a file backend) [passed]
runtime 1.834s ... 1.721s
nvme/019 (test NVMe DSM Discard command on NVMeOF block-device ns) [passed]
runtime 1.832s ... 1.804s
nvme/020 (test NVMe DSM Discard command on NVMeOF file-backed ns) [passed]
runtime 1.811s ... 1.717s
nvme/021 (test NVMe list command on NVMeOF file-backed ns) [passed]
runtime 1.807s ... 1.703s
nvme/022 (test NVMe reset command on NVMeOF file-backed ns) [passed]
runtime 1.914s ... 1.784s
nvme/023 (test NVMe smart-log command on NVMeOF block-device ns) [passed]
runtime 1.852s ... 1.730s
nvme/024 (test NVMe smart-log command on NVMeOF file-backed ns) [passed]
runtime 1.730s ... 1.754s
nvme/025 (test NVMe effects-log command on NVMeOF file-backed ns) [passed]
runtime 1.759s ... 1.719s
nvme/026 (test NVMe ns-descs command on NVMeOF file-backed ns) [passed]
runtime 1.764s ... 1.675s
nvme/027 (test NVMe ns-rescan command on NVMeOF file-backed ns) [passed]
runtime 1.734s ... 1.703s
nvme/028 (test NVMe list-subsys command on NVMeOF file-backed ns) [passed]
runtime 1.831s ... 1.732s
nvme/029 (test userspace IO via nvme-cli read/write interface) [passed]
runtime 2.388s ... 2.065s
nvme/030 (ensure the discovery generation counter is updated appropriately) [passed]
runtime 0.756s ... 0.631s
nvme/031 (test deletion of NVMeOF controllers immediately after setup) [passed]
runtime 4.566s ... 3.441s
nvme/038 (test deletion of NVMeOF subsystem without enabling) [passed]
runtime 0.054s ... 0.055s
nvme/040 (test nvme fabrics controller reset/disconnect operation during I/O)
nvme/040 (test nvme fabrics controller reset/disconnect operation during I/O) [passed]
runtime 7.948s ... 7.866srk/blktests/results/tmpdir.nvme.040.4lT': Directory not empty
modprobe: FATAL: Module loop is in use.
modprobe: FATAL: Module loop is in use.
modprobe: FATAL: Module loop is in use.
modprobe: FATAL: Module loop is in use.
modprobe: FATAL: Module loop is in use.
modprobe: FATAL: Module loop is in use.
modprobe: FATAL: Module loop is in use.
modprobe: FATAL: Module loop is in use.
modprobe: FATAL: Module loop is in use.
modprobe: FATAL: Module loop is in use.
nvme/041 (Create authenticated connections)
runtime 0.964s ...
WARNING: Test did not clean up fc device: nvme0
nvme/041 (Create authenticated connections) [failed]
runtime 0.964s ... 0.311s
--- tests/nvme/041.out 2023-02-20 10:31:10.953935278 +0100
+++ /home/wagi/work/blktests/results/nodev/nvme/041.out.bad 2023-04-18 14:31:05.122062907 +0200
@@ -1,6 +1,8 @@
Running nvme/041
Test unauthenticated connection (should fail)
+failed to lookup subsystem for controller nvme0
NQN:blktests-subsystem-1 disconnected 0 controller(s)
Test authenticated connection
-NQN:blktests-subsystem-1 disconnected 1 controller(s)
+failed to lookup subsystem for controller nvme0
...
(Run 'diff -u tests/nvme/041.out /home/wagi/work/blktests/results/nodev/nvme/041.out.bad' to see the entire diff)
WARNING: Test did not clean up fc device: nvme0
failed to lookup subsystem for controller nvme0
Did not find device nvme0
nvme/042 (Test dhchap key types for authenticated connections) [failed]
runtime 4.495s ... 4.226s
--- tests/nvme/042.out 2022-08-30 10:20:14.174819528 +0200
+++ /home/wagi/work/blktests/results/nodev/nvme/042.out.bad 2023-04-18 14:31:09.654086133 +0200
@@ -1,7 +1,9 @@
Running nvme/042
Testing hmac 0
+failed to lookup subsystem for controller nvme0
NQN:blktests-subsystem-1 disconnected 1 controller(s)
Testing hmac 1
+failed to lookup subsystem for controller nvme0
NQN:blktests-subsystem-1 disconnected 1 controller(s)
...
(Run 'diff -u tests/nvme/042.out /home/wagi/work/blktests/results/nodev/nvme/042.out.bad' to see the entire diff)
nvme/043 (Test hash and DH group variations for authenticated connections) [passed]
runtime 3.592s ... 8.750s
nvme/044 (Test bi-directional authentication)
runtime 1.099s ...
WARNING: Test did not clean up fc device: nvme0
nvme/044 (Test bi-directional authentication) [failed]
runtime 1.099s ... 1.064s
--- tests/nvme/044.out 2023-02-20 10:31:10.953935278 +0100
+++ /home/wagi/work/blktests/results/nodev/nvme/044.out.bad 2023-04-18 14:31:20.042139370 +0200
@@ -2,9 +2,12 @@
Test host authentication
NQN:blktests-subsystem-1 disconnected 1 controller(s)
Test invalid ctrl authentication (should fail)
+failed to lookup subsystem for controller nvme0
NQN:blktests-subsystem-1 disconnected 0 controller(s)
Test valid ctrl authentication
-NQN:blktests-subsystem-1 disconnected 1 controller(s)
...
(Run 'diff -u tests/nvme/044.out /home/wagi/work/blktests/results/nodev/nvme/044.out.bad' to see the entire diff)
WARNING: Test did not clean up fc device: nvme0
failed to lookup subsystem for controller nvme0
Did not find device nvme0
nvme/045 (Test re-authentication) [passed]
runtime 5.582s ... 6.262s
nvme/047 (test different queue types for fabric transports) [not run]
nvme_trtype=fc is not supported in this test
nvme/048 (Test queue count changes on reconnect) [failed]
runtime 15.586s ... 16.545s
--- tests/nvme/048.out 2023-04-06 10:12:58.333064747 +0200
+++ /home/wagi/work/blktests/results/nodev/nvme/048.out.bad 2023-04-18 14:31:43.614260172 +0200
@@ -1,3 +1,7 @@
Running nvme/048
+expected state "connecting" not reached within 5 seconds
+FAIL
+expected state "connecting" not reached within 5 seconds
+FAIL
NQN:blktests-subsystem-1 disconnected 1 controller(s)
Test complete

[1] https://lore.kernel.org/linux-nvme/20230418123252.3725-1-dwagner@xxxxxxx/

changes:
v3:
- do not unlink rport twice

v2:
- added additional fixes
- https://lore.kernel.org/linux-nvme/20230411120718.14477-1-dwagner@xxxxxxx/

v1:
- initial version
- https://lore.kernel.org/linux-nvme/20230411092209.12719-1-dwagner@xxxxxxx/

Daniel Wagner (4):
nvmet-fcloop: Remove remote port from list when unlinking
nvmet-fcloop: Do not wait on completion when unregister fails
nvmet-fc: Do not wait in vain when unloading module
nvmet-fc: Release reference on target port

drivers/nvme/host/fc.c | 20 +++++++++++++-------
drivers/nvme/target/fc.c | 1 +
drivers/nvme/target/fcloop.c | 10 ++++------
3 files changed, 18 insertions(+), 13 deletions(-)

--
2.40.0