Spdk/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 bdev: Use iovec to save original md buffer in IO request 2022-03-09 08:02:19 +00:00
blob blob: add return codes to bs_user_op_abort 2022-03-02 08:39:50 +00:00
blobfs so_ver: increase all major versions 2022-01-31 15:29:56 +00:00
conf so_ver: increase all major versions 2022-01-31 15:29:56 +00:00
dma so_ver: increase all major versions 2022-01-31 15:29:56 +00:00
env_dpdk env/memory: fix unregistration of memory after memory registration issue 2022-03-09 09:06:30 +00:00
env_ocf bdev/ocf: Improve OCF mpools 2022-03-02 08:34:39 +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 so_ver: increase all major versions 2022-01-31 15:29:56 +00:00
idxd idxd: introduce new IDXD flag for cache control 2022-03-04 21:56:54 +00:00
init so_ver: increase all major versions 2022-01-31 15:29:56 +00:00
ioat so_ver: increase all major versions 2022-01-31 15:29:56 +00:00
iscsi iscsi: fix a memory leak in error handling 2022-02-24 14:55:16 +00:00
json so_ver: increase all major versions 2022-01-31 15:29:56 +00:00
jsonrpc so_ver: increase all major versions 2022-01-31 15:29:56 +00:00
log so_ver: increase all major versions 2022-01-31 15:29:56 +00:00
lvol lvol: finish initial iteration even if blob has no name 2022-02-03 19:43:35 +00:00
nbd so_ver: increase all major versions 2022-01-31 15:29:56 +00:00
notify so_ver: increase all major versions 2022-01-31 15:29:56 +00:00
nvme nvme: Free I/O qpair now even if it is in poll group completion 2022-03-15 09:05:09 +00:00
nvmf nvmf: fix trid comparison for discovery subsystem entries 2022-03-14 08:44:21 +00:00
rdma so_ver: increase all major versions 2022-01-31 15:29:56 +00:00
reduce so_ver: increase all major versions 2022-01-31 15:29:56 +00:00
rocksdb rocksdb: fix thread name typo 2021-09-03 08:08:20 +00:00
rpc so_ver: increase all major versions 2022-01-31 15:29:56 +00:00
scsi thread: add spdk_thread_exec_msg() 2022-02-23 10:06:49 +00:00
sock so_ver: increase all major versions 2022-01-31 15:29:56 +00:00
thread event: Add a user option to change the size of spdk_msg_mempool 2022-03-09 08:00:28 +00:00
trace so_ver: increase all major versions 2022-01-31 15:29:56 +00:00
trace_parser so_ver: increase all major versions 2022-01-31 15:29:56 +00:00
ut_mock so_ver: increase all major versions 2022-01-31 15:29:56 +00:00
util util/dif: check metadata buffer in spdk_dix_verify() 2022-02-10 22:41:26 +00:00
vfio_user so_ver: increase all major versions 2022-01-31 15:29:56 +00:00
vhost lib/vhost: move virtio related functions to rte_vhost 2022-03-09 08:01:51 +00:00
virtio so_ver: increase all major versions 2022-01-31 15:29:56 +00:00
vmd vmd: reset root port config before enumeration 2022-03-10 16:45:18 +00:00
Makefile lib/trace_parser: add trace_parser library stubs 2021-09-29 08:57:58 +00:00