diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index 4f8bfc3836..11cc26f3e2 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -920,8 +920,8 @@ nvme_ctrlr_start(struct spdk_nvme_ctrlr *ctrlr) return 0; } -static inline int -pthread_mutex_init_recursive(pthread_mutex_t *mtx) +int +nvme_mutex_init_recursive_shared(pthread_mutex_t *mtx) { pthread_mutexattr_t attr; int rc = 0; @@ -930,6 +930,7 @@ pthread_mutex_init_recursive(pthread_mutex_t *mtx) return -1; } if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) || + pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED) || pthread_mutex_init(mtx, &attr)) { rc = -1; } @@ -963,7 +964,7 @@ nvme_ctrlr_construct(struct spdk_nvme_ctrlr *ctrlr) TAILQ_INIT(&ctrlr->active_io_qpairs); - pthread_mutex_init_recursive(&ctrlr->ctrlr_lock); + nvme_mutex_init_recursive_shared(&ctrlr->ctrlr_lock); return 0; } diff --git a/lib/nvme/nvme_internal.h b/lib/nvme/nvme_internal.h index 4d12d23ff6..fc1d087600 100644 --- a/lib/nvme/nvme_internal.h +++ b/lib/nvme/nvme_internal.h @@ -602,6 +602,7 @@ bool nvme_intel_has_quirk(struct pci_id *id, uint64_t quirk); void spdk_nvme_ctrlr_opts_set_defaults(struct spdk_nvme_ctrlr_opts *opts); int nvme_mutex_init_shared(pthread_mutex_t *mtx); +int nvme_mutex_init_recursive_shared(pthread_mutex_t *mtx); bool nvme_completion_is_retry(const struct spdk_nvme_cpl *cpl); void nvme_qpair_print_command(struct spdk_nvme_qpair *qpair, struct spdk_nvme_cmd *cmd);