From: Nilay Shroff <nilay@linux.ibm.com>
To: linux-nvme@lists.infradead.org
Cc: kbusch@kernel.org, sagi@grimberg.me, hch@lst.de, axboe@fb.com,
john.g.garry@oracle.com, wenxiong@linux.ibm.com,
gjoyce@linux.ibm.com, Nilay Shroff <nilay@linux.ibm.com>,
Marco Elver <elver@google.com>
Subject: [PATCH 2/2] nvme: add context annotation for nvme_ns_head::nr_openers
Date: Mon, 31 Aug 2026 20:49:55 +0530 [thread overview]
Message-ID: <20260831152006.819471-3-nilay@linux.ibm.com> (raw)
In-Reply-To: <20260831152006.819471-1-nilay@linux.ibm.com>
nvme_ns_head::nr_openers is protected by nvme_subsystem::lock. Annotate
it with __guarded_by(&subsys->lock) so that Clang's context analyzer can
validate that all accesses to nvme_ns_head::nr_openers are protected by
nvme_subsystem::lock.
Clang's context analyzer cannot currently model the same lock when it
is accessed through different object paths. Explicitly add the
capability in nvme_init_ns_head() using
__assume_ctx_lock(&head->subsys->lock) to avoid a false positive, as
ctrl->subsys->lock and head->subsys->lock refer to the same lock.
Similarly, in nvme_ns_remove(), replace ns->ctrl->subsys->lock with
ns->head->subsys->lock so that the lock expression matches the
capability used by the __guarded_by() annotation and avoids a false
positive from the context analyzer.
Cc: Marco Elver <elver@google.com>
Signed-off-by: Nilay Shroff <nilay@linux.ibm.com>
---
drivers/nvme/host/core.c | 5 +++--
drivers/nvme/host/nvme.h | 3 ++-
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index fdf760c57e02..29e3f2a7b5dd 100644
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -4173,6 +4173,7 @@ static int nvme_init_ns_head(struct nvme_ns *ns, struct nvme_ns_info *info)
list_add_tail_rcu(&ns->siblings, &head->list);
ns->head = head;
+ __assume_ctx_lock(&head->subsys->lock);
ret = nvme_module_get(ns, head->nr_openers);
if (ret)
goto out_err_module_get;
@@ -4368,7 +4369,7 @@ static void nvme_ns_remove(struct nvme_ns *ns)
if (nvme_mpath_clear_current_path(ns))
synchronize_srcu(&ns->head->srcu);
- mutex_lock(&ns->ctrl->subsys->lock);
+ mutex_lock(&ns->head->subsys->lock);
list_del_rcu(&ns->siblings);
if (list_empty(&ns->head->list)) {
if (!nvme_mpath_queue_if_no_path(ns->head))
@@ -4376,7 +4377,7 @@ static void nvme_ns_remove(struct nvme_ns *ns)
last_path = true;
}
nvme_module_put(ns, ns->head->nr_openers);
- mutex_unlock(&ns->ctrl->subsys->lock);
+ mutex_unlock(&ns->head->subsys->lock);
/* guarantee not available in head->list */
synchronize_srcu(&ns->head->srcu);
diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
index db08f4618f92..d2b91140712c 100644
--- a/drivers/nvme/host/nvme.h
+++ b/drivers/nvme/host/nvme.h
@@ -569,7 +569,8 @@ struct nvme_ns_head {
struct gendisk *disk;
- unsigned int nr_openers;
+ unsigned int nr_openers
+ __guarded_by(&subsys->lock);
u16 nr_plids;
u16 *plids;
--
2.53.0
next prev parent reply other threads:[~2026-08-31 15:21 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-31 15:19 [PATCH 0/2] nvme: add reference counting for transport modules Nilay Shroff
2026-08-31 15:19 ` [PATCH 1/2] nvme: keep transport module referenced while head node is open Nilay Shroff
2026-09-01 16:39 ` Keith Busch
2026-09-02 4:55 ` Nilay Shroff
2026-09-02 0:20 ` Wen Xiong
2026-09-02 13:31 ` Christoph Hellwig
2026-09-02 14:09 ` Nilay Shroff
2026-09-02 14:13 ` Christoph Hellwig
2026-09-02 14:25 ` Keith Busch
2026-09-02 14:27 ` Nilay Shroff
2026-09-13 14:03 ` Nilay Shroff
2026-08-31 15:19 ` Nilay Shroff [this message]
2026-09-01 8:14 ` [PATCH 0/2] nvme: add reference counting for transport modules John Garry
2026-09-01 9:47 ` Nilay Shroff
2026-09-01 10:14 ` John Garry
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260831152006.819471-3-nilay@linux.ibm.com \
--to=nilay@linux.ibm.com \
--cc=axboe@fb.com \
--cc=elver@google.com \
--cc=gjoyce@linux.ibm.com \
--cc=hch@lst.de \
--cc=john.g.garry@oracle.com \
--cc=kbusch@kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=sagi@grimberg.me \
--cc=wenxiong@linux.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.