Spdk/test/unit/lib
Shuhei Matsumoto 1285481917 nvme: Free I/O qpair now even if it is in poll group completion
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>
2022-03-15 09:05:09 +00:00
..
accel accel/idxd: add and respect flag to support writes to PMEM 2022-03-04 21:56:54 +00:00
bdev nvme: Free I/O qpair now even if it is in poll group completion 2022-03-15 09:05:09 +00:00
blob blob_ut: bs_opts initialized with wrong size 2022-02-02 08:25:02 +00:00
blobfs test: optimize unit test .gitignore files 2021-08-20 07:29:57 +00:00
dma dma: Update memory domain context structure 2021-10-20 22:55:52 +00:00
env_dpdk test: optimize unit test .gitignore files 2021-08-20 07:29:57 +00:00
event event: Add a user option to change the size of spdk_msg_mempool 2022-03-09 08:00:28 +00:00
ftl spelling: test 2021-12-03 08:13:22 +00:00
idxd Revert "idxd: No longer set token configuration" 2022-03-02 17:22:08 +00:00
init spelling: test 2021-12-03 08:13:22 +00:00
ioat test: optimize unit test .gitignore files 2021-08-20 07:29:57 +00:00
iscsi ut: Use unit/lib/json_mock.c for stubs 2022-01-31 09:44:28 +00:00
json spelling: test 2021-12-03 08:13:22 +00:00
jsonrpc spelling: test 2021-12-03 08:13:22 +00:00
log test: optimize unit test .gitignore files 2021-08-20 07:29:57 +00:00
lvol lvol: lvol_get_xattr_value failure undetectable 2022-01-31 09:44:16 +00:00
notify test: optimize unit test .gitignore files 2021-08-20 07:29:57 +00:00
nvme test/unit: fix valgrind error for test_nvme_free_request 2022-03-09 08:03:23 +00:00
nvmf nvmf/rdma: Fix overflow of RB tree comparison when qp_num is very big 2022-03-09 08:00:58 +00:00
reduce spelling: test 2021-12-03 08:13:22 +00:00
rpc ut: Use unit/lib/json_mock.c for stubs 2022-01-31 09:44:28 +00:00
scsi Lib/iSCSI: add the LUN Resize support 2022-01-20 07:56:23 +00:00
sock ut: Use unit/lib/json_mock.c for stubs 2022-01-31 09:44:28 +00:00
thread event: Add a user option to change the size of spdk_msg_mempool 2022-03-09 08:00:28 +00:00
util spelling: test 2021-12-03 08:13:22 +00:00
vhost lib/vhost: move dev_dirname to rte_vhost_user 2022-01-20 19:09:20 +00:00
json_mock.c ut/json_mock: Add stubs for json_write_uint8 and _uint16 2022-01-31 09:44:28 +00:00
Makefile unittest/rpc: add rpc unittest 2021-09-06 09:55:33 +00:00