linux/drivers/nvme/target
Sagi Grimberg ca3b4293dc nvmet: fix ns enable/disable possible hang
[ Upstream commit f97914e35f ]

When disabling an nvmet namespace, there is a period where the
subsys->lock is released, as the ns disable waits for backend IO to
complete, and the ns percpu ref to be properly killed. The original
intent was to avoid taking the subsystem lock for a prolong period as
other processes may need to acquire it (for example new incoming
connections).

However, it opens up a window where another process may come in and
enable the ns, (re)intiailizing the ns percpu_ref, causing the disable
sequence to hang.

Solve this by taking the global nvmet_config_sem over the entire configfs
enable/disable sequence.

Fixes: a07b4970f4 ("nvmet: add a generic NVMe target")
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2024-06-12 11:12:53 +02:00
..
admin-cmd.c nvmet: remove nvmet_req_cns_error_complete 2023-04-13 08:55:05 +02:00
auth.c nvmet-auth: replace pr_debug() with pr_err() to report an error. 2024-06-12 11:11:29 +02:00
configfs.c nvmet: fix ns enable/disable possible hang 2024-06-12 11:12:53 +02:00
core.c nvmet: fix nvme status code when namespace is disabled 2024-06-12 11:11:30 +02:00
discovery.c nvme: move from strlcpy with unused retval to strscpy 2022-09-19 11:33:53 +02:00
fabrics-cmd-auth.c nvmet-auth: complete a request only after freeing the dhchap pointers 2023-10-18 14:08:39 -07:00
fabrics-cmd.c nvmet: nul-terminate the NQNs passed in the connect command 2023-12-03 07:33:06 +01:00
fc.c nvmet-fc: take ref count on tgtport before delete assoc 2024-03-01 13:34:52 +01:00
fcloop.c nvmet-fcloop: swap the list_add_tail arguments 2024-03-01 13:34:52 +01:00
io-cmd-bdev.c bio-integrity: update the payload size in bio_integrity_add_page() 2023-08-09 16:05:35 -06:00
io-cmd-file.c nvmet: use bvec_set_page to initialize bvecs 2023-02-03 08:20:55 -07:00
Kconfig nvmet-auth: select the intended CRYPTO_DH_RFC7919_GROUPS 2022-08-02 17:22:51 -06:00
loop.c nvmet: use PAGE_SECTORS_SHIFT 2023-07-10 08:46:30 -07:00
Makefile nvmet: implement basic In-Band Authentication 2022-08-02 17:14:49 -06:00
nvmet.h nvmet: fix nvme status code when namespace is disabled 2024-06-12 11:11:30 +02:00
passthru.c nvmet: use PAGE_SECTORS_SHIFT 2023-07-10 08:46:30 -07:00
rdma.c RDMA/core: introduce ib_dma_pci_p2p_dma_supported() 2022-07-26 07:28:07 -04:00
tcp.c nvmet-tcp: fix possible memory leak when tearing down a controller 2024-06-12 11:11:30 +02:00
trace.c nvmet: add set feature tracing support 2021-08-16 14:42:23 +02:00
trace.h nvme: trace: avoid memcpy overflow warning 2024-01-25 15:35:55 -08:00
zns.c nvmet: rename nvmet_execute_identify_cns_cs_ns 2023-04-13 08:55:04 +02:00