Re: [PATCH v2 1/2] nvmet: defer setting ns->enabled to false in nvmet_ns_disable()

From: Shin'ichiro Kawasaki

Date: Thu Oct 01 2026 - 01:56:12 EST


On Sep 18, 2026 / 21:57, Nilay Shroff wrote:
> nvmet_ns_disable() currently clears ns->enabled before draining
> in-flight I/O references. This allows namespace configuration to be
> changed while existing I/O requests can still hold a reference to the
> namespace.
>
> This can race with configuration of namespace attributes such as the
> device path, UUID, NGUID etc. These attributes can be accessed by I/O
> requests without holding subsys->lock and must not be modified while
> such requests are still using the namespace.
>
> In nvmet_ns_disable(), keep ns->enabled set while existing namespace
> references are being drained, so namespace configuration remains blocked
> until all in-flight I/O has completed. Set ns->enabled to false only
> after the namespace references have been drained and the namespace
> device has been disabled.
>
> Introduce the NVMET_NS_IO_LIVE flag, which is set after the namespace
> is successfully enabled in nvmet_ns_enable(). When nvmet_ns_disable()
> starts, clear NVMET_NS_IO_LIVE so that the I/O path stops admitting new
> I/O once the flag is cleared. Using test_and_clear_bit() in
> nvmet_ns_disable() also prevents concurrent callers from starting a
> second disable operation.
>
> Signed-off-by: Nilay Shroff <nilay@xxxxxxxxxxxxx>

Recent blktests-ci trial runs for nvme-7.3 branch reported failure of nvme/052
[*]. It is required to repeat the test case 3 to 20 times to recreate the
failure on my test system. I bisected and find this patch is the trigger of the
failure.

Nilay, may I ask you to take a look in the failure? I'm not sure if this should
be addressed in kernel side of blktests side.

[*]

nvme/052 (tr=loop) (Test file-ns creation/deletion under one subsystem) [failed]
runtime ... 12.165s
--- tests/nvme/052.out 2026-09-29 00:36:09.236884509 +0000
+++ /home/runner/blktests/results/nodev_tr_loop/nvme/052.out.bad 2026-09-29 01:06:09.513359622 +0000
@@ -1,2 +1,4 @@
Running nvme/052
+namespace with uuid "492157d2-1f3b-4bc2-b717-e6234d0fa466" not created within 5 seconds
+FAIL
Test complete