diff --git a/include/spdk/nvme.h b/include/spdk/nvme.h index 7ef940cb9..30e3f28a1 100644 --- a/include/spdk/nvme.h +++ b/include/spdk/nvme.h @@ -3083,6 +3083,14 @@ int spdk_nvme_map_prps(void *prv, struct spdk_nvme_cmd *cmd, struct iovec *iovs, */ struct spdk_nvme_transport_poll_group; +/** + * Update and populate namespace CUSE devices (Experimental) + * + * \param ctrlr Opaque handle to the NVMe controller. + * + */ +void spdk_nvme_cuse_update_namespaces(struct spdk_nvme_ctrlr *ctrlr); + struct nvme_request; struct spdk_nvme_transport; diff --git a/lib/nvme/nvme_cuse.c b/lib/nvme/nvme_cuse.c index 664a6af1b..a3f81c861 100644 --- a/lib/nvme/nvme_cuse.c +++ b/lib/nvme/nvme_cuse.c @@ -985,6 +985,24 @@ nvme_cuse_stop(struct spdk_nvme_ctrlr *ctrlr) pthread_mutex_unlock(&g_cuse_mtx); } +static void +nvme_cuse_update(struct spdk_nvme_ctrlr *ctrlr) +{ + struct cuse_device *ctrlr_device; + + pthread_mutex_lock(&g_cuse_mtx); + + ctrlr_device = nvme_cuse_get_cuse_ctrlr_device(ctrlr); + if (!ctrlr_device) { + pthread_mutex_unlock(&g_cuse_mtx); + return; + } + + cuse_nvme_ctrlr_update_namespaces(ctrlr_device); + + pthread_mutex_unlock(&g_cuse_mtx); +} + static struct nvme_io_msg_producer cuse_nvme_io_msg_producer = { .name = "cuse", .stop = nvme_cuse_stop, @@ -1035,6 +1053,12 @@ spdk_nvme_cuse_unregister(struct spdk_nvme_ctrlr *ctrlr) return 0; } +void +spdk_nvme_cuse_update_namespaces(struct spdk_nvme_ctrlr *ctrlr) +{ + nvme_cuse_update(ctrlr); +} + int spdk_nvme_cuse_get_ctrlr_name(struct spdk_nvme_ctrlr *ctrlr, char *name, size_t *size) { diff --git a/lib/nvme/spdk_nvme.map b/lib/nvme/spdk_nvme.map index 9d8acb8e5..b674c8f50 100644 --- a/lib/nvme/spdk_nvme.map +++ b/lib/nvme/spdk_nvme.map @@ -144,6 +144,7 @@ spdk_nvme_cuse_get_ns_name; spdk_nvme_cuse_register; spdk_nvme_cuse_unregister; + spdk_nvme_cuse_update_namespaces; spdk_nvme_map_prps;