From 194ba5833fa55d1d392fe2b4fa36982b6cccbb69 Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Fri, 24 Aug 2018 10:16:23 -0700 Subject: [PATCH] nvmf: Add helper function to verify qpair state is set from correct thread In debug mode this will verify that the state is being set from the correct thread only. Change-Id: I6234299d1fcdb63cd047417b6255c91e29991242 Signed-off-by: Ben Walker Reviewed-on: https://review.gerrithub.io/423411 Chandler-Test-Pool: SPDK Automated Test System Tested-by: SPDK CI Jenkins Reviewed-by: Changpeng Liu Reviewed-by: Shuhei Matsumoto Reviewed-by: Seth Howell Reviewed-by: Jim Harris --- lib/nvmf/nvmf.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/lib/nvmf/nvmf.c b/lib/nvmf/nvmf.c index 97cd84c77..3235c0d46 100644 --- a/lib/nvmf/nvmf.c +++ b/lib/nvmf/nvmf.c @@ -80,6 +80,16 @@ struct nvmf_qpair_disconnect_many_ctx { void *cpl_ctx; }; +static void +spdk_nvmf_qpair_set_state(struct spdk_nvmf_qpair *qpair, + enum spdk_nvmf_qpair_state state) +{ + assert(qpair != NULL); + assert(qpair->group->thread == spdk_get_thread()); + + qpair->state = state; +} + void spdk_nvmf_tgt_opts_init(struct spdk_nvmf_tgt_opts *opts) { @@ -599,7 +609,7 @@ spdk_nvmf_poll_group_add(struct spdk_nvmf_poll_group *group, TAILQ_INIT(&qpair->outstanding); qpair->group = group; - qpair->state = SPDK_NVMF_QPAIR_ACTIVATING; + spdk_nvmf_qpair_set_state(qpair, SPDK_NVMF_QPAIR_ACTIVATING); TAILQ_INSERT_TAIL(&group->qpairs, qpair, link); @@ -611,9 +621,9 @@ spdk_nvmf_poll_group_add(struct spdk_nvmf_poll_group *group, } if (rc == 0) { - qpair->state = SPDK_NVMF_QPAIR_ACTIVE; + spdk_nvmf_qpair_set_state(qpair, SPDK_NVMF_QPAIR_ACTIVE); } else { - qpair->state = SPDK_NVMF_QPAIR_INACTIVE; + spdk_nvmf_qpair_set_state(qpair, SPDK_NVMF_QPAIR_INACTIVE); } return rc; @@ -655,13 +665,13 @@ _spdk_nvmf_qpair_destroy(void *ctx, int status) struct spdk_nvmf_qpair *qpair = qpair_ctx->qpair; struct spdk_nvmf_ctrlr *ctrlr = qpair->ctrlr; + assert(qpair->state == SPDK_NVMF_QPAIR_DEACTIVATING); + spdk_nvmf_qpair_set_state(qpair, SPDK_NVMF_QPAIR_INACTIVE); + qpair_ctx->qid = qpair->qid; + TAILQ_REMOVE(&qpair->group->qpairs, qpair, link); qpair->group = NULL; - assert(qpair->state == SPDK_NVMF_QPAIR_DEACTIVATING); - qpair->state = SPDK_NVMF_QPAIR_INACTIVE; - qpair_ctx->qid = qpair->qid; - spdk_nvmf_transport_qpair_fini(qpair); if (!ctrlr || !ctrlr->thread) { @@ -696,7 +706,7 @@ _spdk_nvmf_qpair_deactivate(void *ctx) } assert(qpair->state == SPDK_NVMF_QPAIR_ACTIVE); - qpair->state = SPDK_NVMF_QPAIR_DEACTIVATING; + spdk_nvmf_qpair_set_state(qpair, SPDK_NVMF_QPAIR_DEACTIVATING); /* Check for outstanding I/O */ if (!TAILQ_EMPTY(&qpair->outstanding)) {