]> www.infradead.org Git - users/griffoul/linux.git/commitdiff
nvmet: add safety check for subsys lock
authorMax Gurtovoy <mgurtovoy@nvidia.com>
Sun, 21 Sep 2025 12:44:05 +0000 (15:44 +0300)
committerKeith Busch <kbusch@kernel.org>
Tue, 23 Sep 2025 22:38:28 +0000 (15:38 -0700)
Replace comment about required lock with a lockdep_assert_held()
check in the following functions:
 - nvmet_p2pmem_ns_add_p2p()
 - nvmet_setup_p2p_ns_map()
 - nvmet_release_p2p_ns_map()

This ensures the subsystem lock is held at runtime.

Signed-off-by: Max Gurtovoy <mgurtovoy@nvidia.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Keith Busch <kbusch@kernel.org>
drivers/nvme/target/core.c

index 0dd7bd99afa327442697902f44e7a3082837f311..5d7d483bfbe372406869181b9b1fc56afd3f6846 100644 (file)
@@ -513,9 +513,6 @@ static int nvmet_p2pmem_ns_enable(struct nvmet_ns *ns)
        return 0;
 }
 
-/*
- * Note: ctrl->subsys->lock should be held when calling this function
- */
 static void nvmet_p2pmem_ns_add_p2p(struct nvmet_ctrl *ctrl,
                                    struct nvmet_ns *ns)
 {
@@ -523,6 +520,8 @@ static void nvmet_p2pmem_ns_add_p2p(struct nvmet_ctrl *ctrl,
        struct pci_dev *p2p_dev;
        int ret;
 
+       lockdep_assert_held(&ctrl->subsys->lock);
+
        if (!ctrl->p2p_client || !ns->use_p2pmem)
                return;
 
@@ -1539,15 +1538,14 @@ bool nvmet_host_allowed(struct nvmet_subsys *subsys, const char *hostnqn)
        return false;
 }
 
-/*
- * Note: ctrl->subsys->lock should be held when calling this function
- */
 static void nvmet_setup_p2p_ns_map(struct nvmet_ctrl *ctrl,
                struct device *p2p_client)
 {
        struct nvmet_ns *ns;
        unsigned long idx;
 
+       lockdep_assert_held(&ctrl->subsys->lock);
+
        if (!p2p_client)
                return;
 
@@ -1557,14 +1555,13 @@ static void nvmet_setup_p2p_ns_map(struct nvmet_ctrl *ctrl,
                nvmet_p2pmem_ns_add_p2p(ctrl, ns);
 }
 
-/*
- * Note: ctrl->subsys->lock should be held when calling this function
- */
 static void nvmet_release_p2p_ns_map(struct nvmet_ctrl *ctrl)
 {
        struct radix_tree_iter iter;
        void __rcu **slot;
 
+       lockdep_assert_held(&ctrl->subsys->lock);
+
        radix_tree_for_each_slot(slot, &ctrl->p2p_ns_map, &iter, 0)
                pci_dev_put(radix_tree_deref_slot(slot));