spdk_nvme_poll_group has followed spdk_nvme_qpair about how to process I/O qpair deletion inside of a completion context. spdk_nvme_qpair_process_completions() accesses qpair after returning from nvme_transport_qpair_process_completions(). So this is reasonable. On the other hand, if spdk_nvme_poll_group_process_completions() can execute spdk_nvme_ctrlr_free_io_qpair() inside of a completion context, the target qpair is ensured to be deleted after returning from spdk_nvme_ctrlr_free_io_qpair(). Then the target qpair is not accessed anymore in spdk_nvme_poll_group_process_completions(). Remove two variables, in_completion_context and num_qpairs_to_delete, of spdk_nvme_transport_poll_group and the related code. This change is really necessary to support the following case. In the NVMe bdev module, a nvme_qpair has a qpair and a poll_group channel. disconnected_qpair_cb calls spdk_nvme_ctrlr_free_io_qpair() for the qpair and spdk_put_io_channel() to the poll_group_channel. spdk_nvme_ctrlr_free_io_qpair() is executed after unwinding stack but spdk_put_io_channel() is executed now. The callback to spdk_put_io_channel() calls spdk_nvme_poll_group_destroy(). However, spdk_nvme_ctrlr_free_io_qpair() is not executed. Hence spdk_nvme_poll_group_destroy() fails. Update the corresponding stub in unit test together. Signed-off-by: Shuhei Matsumoto <smatsumoto@nvidia.com> Change-Id: Icd1f1daf049c6c7ffb28790fe87989a1060f8952 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11496 Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com> Community-CI: Mellanox Build Bot Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> |
||
---|---|---|
.. | ||
bdev_nvme.c | ||
Makefile |