nvme: fixing ctrlr mutex free
adding nvme_ctrlr_destruct_finish because nvme_transport_ctrlr_destruct may use a destroyed mutex. nvme_ctrlr_destruct() free "ctrlr_lock" and after that call nvme_transport_ctrlr_destruct()->nvme_pcie_ctrlr_destruct()(with pci)-> nvme_ctrlr_proc_get_devhandle()->nvme_robust_mutex_lock(&ctrlr->ctrlr_lock); Change-Id: I55714ea9097d2c9d844a00b5a88fa2d51a3f4469 Signed-off-by: Ehud Naim <ehudn@marvell.com> Reviewed-on: https://review.gerrithub.io/399605 Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
76f54a29d2
commit
c83cd9375b
@ -1670,6 +1670,12 @@ nvme_ctrlr_init_cap(struct spdk_nvme_ctrlr *ctrlr, const union spdk_nvme_cap_reg
|
|||||||
ctrlr->opts.io_queue_requests = spdk_max(ctrlr->opts.io_queue_requests, ctrlr->opts.io_queue_size);
|
ctrlr->opts.io_queue_requests = spdk_max(ctrlr->opts.io_queue_requests, ctrlr->opts.io_queue_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nvme_ctrlr_destruct_finish(struct spdk_nvme_ctrlr *ctrlr)
|
||||||
|
{
|
||||||
|
pthread_mutex_destroy(&ctrlr->ctrlr_lock);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
nvme_ctrlr_destruct(struct spdk_nvme_ctrlr *ctrlr)
|
nvme_ctrlr_destruct(struct spdk_nvme_ctrlr *ctrlr)
|
||||||
{
|
{
|
||||||
@ -1687,8 +1693,6 @@ nvme_ctrlr_destruct(struct spdk_nvme_ctrlr *ctrlr)
|
|||||||
|
|
||||||
spdk_bit_array_free(&ctrlr->free_io_qids);
|
spdk_bit_array_free(&ctrlr->free_io_qids);
|
||||||
|
|
||||||
pthread_mutex_destroy(&ctrlr->ctrlr_lock);
|
|
||||||
|
|
||||||
nvme_transport_ctrlr_destruct(ctrlr);
|
nvme_transport_ctrlr_destruct(ctrlr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -568,6 +568,7 @@ int nvme_ctrlr_probe(const struct spdk_nvme_transport_id *trid, void *devhandle,
|
|||||||
spdk_nvme_probe_cb probe_cb, void *cb_ctx);
|
spdk_nvme_probe_cb probe_cb, void *cb_ctx);
|
||||||
|
|
||||||
int nvme_ctrlr_construct(struct spdk_nvme_ctrlr *ctrlr);
|
int nvme_ctrlr_construct(struct spdk_nvme_ctrlr *ctrlr);
|
||||||
|
void nvme_ctrlr_destruct_finish(struct spdk_nvme_ctrlr *ctrlr);
|
||||||
void nvme_ctrlr_destruct(struct spdk_nvme_ctrlr *ctrlr);
|
void nvme_ctrlr_destruct(struct spdk_nvme_ctrlr *ctrlr);
|
||||||
void nvme_ctrlr_fail(struct spdk_nvme_ctrlr *ctrlr, bool hot_remove);
|
void nvme_ctrlr_fail(struct spdk_nvme_ctrlr *ctrlr, bool hot_remove);
|
||||||
int nvme_ctrlr_process_init(struct spdk_nvme_ctrlr *ctrlr);
|
int nvme_ctrlr_process_init(struct spdk_nvme_ctrlr *ctrlr);
|
||||||
|
@ -890,6 +890,8 @@ nvme_pcie_ctrlr_destruct(struct spdk_nvme_ctrlr *ctrlr)
|
|||||||
nvme_pcie_qpair_destroy(ctrlr->adminq);
|
nvme_pcie_qpair_destroy(ctrlr->adminq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nvme_ctrlr_destruct_finish(ctrlr);
|
||||||
|
|
||||||
nvme_ctrlr_free_processes(ctrlr);
|
nvme_ctrlr_free_processes(ctrlr);
|
||||||
|
|
||||||
nvme_pcie_ctrlr_free_bars(pctrlr);
|
nvme_pcie_ctrlr_free_bars(pctrlr);
|
||||||
|
@ -1361,6 +1361,8 @@ nvme_rdma_ctrlr_destruct(struct spdk_nvme_ctrlr *ctrlr)
|
|||||||
nvme_rdma_qpair_destroy(ctrlr->adminq);
|
nvme_rdma_qpair_destroy(ctrlr->adminq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nvme_ctrlr_destruct_finish(ctrlr);
|
||||||
|
|
||||||
free(rctrlr);
|
free(rctrlr);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -161,6 +161,12 @@ nvme_ctrlr_construct(struct spdk_nvme_ctrlr *ctrlr)
|
|||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nvme_ctrlr_destruct_finish(struct spdk_nvme_ctrlr *ctrlr)
|
||||||
|
{
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
nvme_ctrlr_destruct(struct spdk_nvme_ctrlr *ctrlr)
|
nvme_ctrlr_destruct(struct spdk_nvme_ctrlr *ctrlr)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user