From 76275cea020f0d631d0cb13587e76a1f71abeb47 Mon Sep 17 00:00:00 2001 From: Changpeng Liu Date: Tue, 26 Oct 2021 18:16:44 +0800 Subject: [PATCH] nvmf/vfio-user: remove queue pair in qpair_fini() callback It's better to remove the connected queue pair in qpair_fini() callback. Change-Id: I016e578643c74ab796e89171cf9a2eb85566d896 Signed-off-by: Changpeng Liu Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/9997 Community-CI: Mellanox Build Bot Community-CI: Broadcom CI Tested-by: SPDK CI Jenkins Reviewed-by: Aleksey Marchuk Reviewed-by: Ben Walker --- lib/nvmf/vfio_user.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/lib/nvmf/vfio_user.c b/lib/nvmf/vfio_user.c index a19ce3c58..6d790172c 100644 --- a/lib/nvmf/vfio_user.c +++ b/lib/nvmf/vfio_user.c @@ -2481,13 +2481,9 @@ nvmf_vfio_user_poll_group_remove(struct spdk_nvmf_transport_poll_group *group, struct spdk_nvmf_qpair *qpair) { struct nvmf_vfio_user_qpair *vu_qpair; - struct nvmf_vfio_user_ctrlr *vu_ctrlr; - struct nvmf_vfio_user_endpoint *endpoint; struct nvmf_vfio_user_poll_group *vu_group; vu_qpair = SPDK_CONTAINEROF(qpair, struct nvmf_vfio_user_qpair, qpair); - vu_ctrlr = vu_qpair->ctrlr; - endpoint = vu_ctrlr->endpoint; SPDK_DEBUGLOG(nvmf_vfio, "%s: remove NVMf QP%d=%p from NVMf poll_group=%p\n", @@ -2497,10 +2493,6 @@ nvmf_vfio_user_poll_group_remove(struct spdk_nvmf_transport_poll_group *group, vu_group = SPDK_CONTAINEROF(group, struct nvmf_vfio_user_poll_group, group); TAILQ_REMOVE(&vu_group->qps, vu_qpair, link); - pthread_mutex_lock(&endpoint->lock); - TAILQ_REMOVE(&vu_ctrlr->connected_qps, vu_qpair, tailq); - pthread_mutex_unlock(&endpoint->lock); - return 0; } @@ -2558,10 +2550,17 @@ nvmf_vfio_user_close_qpair(struct spdk_nvmf_qpair *qpair, spdk_nvmf_transport_qpair_fini_cb cb_fn, void *cb_arg) { struct nvmf_vfio_user_qpair *vu_qpair; + struct nvmf_vfio_user_ctrlr *vu_ctrlr; assert(qpair != NULL); vu_qpair = SPDK_CONTAINEROF(qpair, struct nvmf_vfio_user_qpair, qpair); - free_qp(vu_qpair->ctrlr, qpair->qid); + vu_ctrlr = vu_qpair->ctrlr; + + pthread_mutex_lock(&vu_ctrlr->endpoint->lock); + TAILQ_REMOVE(&vu_ctrlr->connected_qps, vu_qpair, tailq); + pthread_mutex_unlock(&vu_ctrlr->endpoint->lock); + + free_qp(vu_ctrlr, qpair->qid); if (cb_fn) { cb_fn(cb_arg);