diff options
-rw-r--r-- | sys/dev/nvme/nvme_ns.c | 11 | ||||
-rw-r--r-- | sys/dev/nvme/nvme_private.h | 1 |
2 files changed, 12 insertions, 0 deletions
diff --git a/sys/dev/nvme/nvme_ns.c b/sys/dev/nvme/nvme_ns.c index 0051699..b492132 100644 --- a/sys/dev/nvme/nvme_ns.c +++ b/sys/dev/nvme/nvme_ns.c @@ -300,6 +300,17 @@ nvme_ns_construct(struct nvme_namespace *ns, uint16_t id, ns->ctrlr = ctrlr; ns->id = id; + /* + * Namespaces are reconstructed after a controller reset, so check + * to make sure we only call mtx_init once on each mtx. + * + * TODO: Move this somewhere where it gets called at controller + * construction time, which is not invoked as part of each + * controller reset. + */ + if (!mtx_initialized(&ns->lock)) + mtx_init(&ns->lock, "nvme ns lock", NULL, MTX_DEF); + #ifdef CHATHAM2 if (pci_get_devid(ctrlr->dev) == CHATHAM_PCI_ID) nvme_ns_populate_chatham_data(ns); diff --git a/sys/dev/nvme/nvme_private.h b/sys/dev/nvme/nvme_private.h index 9fbef6d..c78b1ea 100644 --- a/sys/dev/nvme/nvme_private.h +++ b/sys/dev/nvme/nvme_private.h @@ -238,6 +238,7 @@ struct nvme_namespace { uint16_t flags; struct cdev *cdev; void *cons_cookie[NVME_MAX_CONSUMERS]; + struct mtx lock; }; /* |