diff --git a/lib/nvmf/nvmf.c b/lib/nvmf/nvmf.c index 4eb24c166..18e74dab4 100644 --- a/lib/nvmf/nvmf.c +++ b/lib/nvmf/nvmf.c @@ -131,6 +131,7 @@ nvmf_tgt_destroy_poll_group(void *io_device, void *ctx_buf) pthread_mutex_lock(&tgt->mutex); TAILQ_REMOVE(&tgt->poll_groups, group, link); + tgt->num_poll_groups--; pthread_mutex_unlock(&tgt->mutex); assert(!(tgt->state == NVMF_TGT_PAUSING || tgt->state == NVMF_TGT_RESUMING)); @@ -212,6 +213,7 @@ nvmf_tgt_create_poll_group(void *io_device, void *ctx_buf) } pthread_mutex_lock(&tgt->mutex); + tgt->num_poll_groups++; TAILQ_INSERT_TAIL(&tgt->poll_groups, group, link); pthread_mutex_unlock(&tgt->mutex); @@ -307,6 +309,7 @@ spdk_nvmf_tgt_create(struct spdk_nvmf_target_opts *opts) tgt->discovery_genctr = 0; TAILQ_INIT(&tgt->transports); TAILQ_INIT(&tgt->poll_groups); + tgt->num_poll_groups = 0; tgt->subsystems = calloc(tgt->max_subsystems, sizeof(struct spdk_nvmf_subsystem *)); if (!tgt->subsystems) { diff --git a/lib/nvmf/nvmf_internal.h b/lib/nvmf/nvmf_internal.h index 092ca4324..db55c17e0 100644 --- a/lib/nvmf/nvmf_internal.h +++ b/lib/nvmf/nvmf_internal.h @@ -69,6 +69,7 @@ struct spdk_nvmf_tgt { void *destroy_cb_arg; uint16_t crdt[3]; + uint16_t num_poll_groups; TAILQ_ENTRY(spdk_nvmf_tgt) link; }; diff --git a/test/unit/lib/nvmf/nvmf.c/nvmf_ut.c b/test/unit/lib/nvmf/nvmf.c/nvmf_ut.c index 9b17e3c2f..2df1d94cc 100644 --- a/test/unit/lib/nvmf/nvmf.c/nvmf_ut.c +++ b/test/unit/lib/nvmf/nvmf.c/nvmf_ut.c @@ -174,6 +174,7 @@ test_nvmf_tgt_create_poll_group(void) TAILQ_INIT(&tgt.transports); TAILQ_INIT(&tgt.poll_groups); + tgt.num_poll_groups = 0; pthread_mutex_init(&tgt.mutex, NULL); transport.tgt = &tgt; TAILQ_INSERT_TAIL(&tgt.transports, &transport, link); @@ -191,11 +192,13 @@ test_nvmf_tgt_create_poll_group(void) CU_ASSERT(group.sgroups[0].ns_info[0].crkey == 0xaa); CU_ASSERT(group.sgroups[0].ns_info[0].rtype == 0xbb); CU_ASSERT(TAILQ_FIRST(&tgt.poll_groups) == &group); + CU_ASSERT(tgt.num_poll_groups == 1); CU_ASSERT(group.thread == thread); CU_ASSERT(group.poller != NULL); nvmf_tgt_destroy_poll_group((void *)&tgt, (void *)&group); CU_ASSERT(TAILQ_EMPTY(&tgt.poll_groups)); + CU_ASSERT(tgt.num_poll_groups == 0); free(tgt.subsystems[0]->ns); free(tgt.subsystems);