Spdk/lib
Ziye Yang 3a1f5364d2 nvme/tcp: Fix nvme_tcp_req free conflict between cmd sending and incoming pdu receiving
This patch tries to solve the out of order
call back handling for cmd sending and the incoming pdu handling.

Normally, the cmd call back will be called before
receving the next PDU from the target if the application
uses the sync manner.

With the uring implementation, after sending the
cmd to the target, we may have the following scenerio:
(1) Firstly receive the incoming pdu(e.g., CapsuleResp pdu, C2hdata pdu)
due to the group polling read event.
(2) Secondly execute the callback function related with NVMe command sending.

This means that the data from the initiator is really sent out to the target,
and the target receives, then sending back the data to the initiator. But the
uring io_uring_cqe event is not handled, thus if we execute
(1) first, it will clean the data structures related with nvme_tcp_req, and the
nvme_tcp_req will be used for other purpose. Then causes wrong behaviour like
the following:

"Rand Write test failed at QD=128 because fio hangs with the following error:
nvme_tcp.c: 971:nvme_tcp_capsule_resp_hdr_handle: *ERROR*:
no tcp_req is found with cid=66 for tqpair=0x7f23d8001710".

And this patch can address this issue.

Signed-off-by: Ziye Yang <ziye.yang@intel.com>
Change-Id: I5043aaa8adf5033d93dedac15f633f0850e0b9f2
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/2818
Community-CI: Mellanox Build Bot
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
2020-06-22 07:47:31 +00:00
..
accel lib/accel: minor cleanup: remove extra stack variable in functions 2020-06-17 07:21:05 +00:00
bdev lib/bdev: Use not SPDK thread count but core count for mempool cache size 2020-06-08 09:33:50 +00:00
blob lib/blob: remove spdk_ prefix from bs_batch_read_bs_dev 2020-06-01 09:21:14 +00:00
blobfs Blobfs: update the display string 2020-05-27 07:36:50 +00:00
conf mk/lib: add a check that major and minor version is set for libs. 2020-05-21 09:19:00 +00:00
env_dpdk env_dpdk: expose base virtaddr as an option 2020-06-16 07:45:07 +00:00
env_ocf lib/ocf_env: fix incorrect value for free memory estimate 2020-04-29 06:42:33 +00:00
event log: remove backtrace printing 2020-06-03 07:39:08 +00:00
ftl lib/ftl: Keep tracing functions under define flag 2020-06-05 09:03:31 +00:00
idxd lib/idxd: clean up some casting and type issues 2020-06-17 07:21:05 +00:00
ioat mk/lib: add a check that major and minor version is set for libs. 2020-05-21 09:19:00 +00:00
iscsi iscsi: Add DataSequenceInOrder in discovery_ignored_param 2020-06-11 19:51:04 +00:00
json lib: json-nbd remove spdk prefix from static functions. 2020-05-21 09:19:00 +00:00
jsonrpc rpc: don't allow starting RPC server on a TCP port 2020-06-08 09:35:16 +00:00
log log: remove backtrace printing 2020-06-03 07:39:08 +00:00
log_rpc lib: json-nbd remove spdk prefix from static functions. 2020-05-21 09:19:00 +00:00
lvol all: Fix warnings found by gcc 9.3.0 and 9.3.1 2020-06-02 09:51:57 +00:00
nbd lib/nbd: Remove inclusion of SPDK event library 2020-06-01 09:20:41 +00:00
net lib: net, notify, nvme, rocksdb remove spdk_ prefix. 2020-05-21 09:19:00 +00:00
notify lib: net, notify, nvme, rocksdb remove spdk_ prefix. 2020-05-21 09:19:00 +00:00
nvme nvme/tcp: Fix nvme_tcp_req free conflict between cmd sending and incoming pdu receiving 2020-06-22 07:47:31 +00:00
nvmf nvmf: Remove new_qpair callback from transport accept function pointer 2020-06-18 07:29:41 +00:00
rdma rdma: Add new API spdk_rdma_qp_accept 2020-06-18 07:28:04 +00:00
reduce mk/lib: add a check that major and minor version is set for libs. 2020-05-21 09:19:00 +00:00
rocksdb lib: net, notify, nvme, rocksdb remove spdk_ prefix. 2020-05-21 09:19:00 +00:00
rpc rpc: don't allow starting RPC server on a TCP port 2020-06-08 09:35:16 +00:00
rte_vhost read_fd_message: distinguish prints of log message 2020-05-25 09:08:00 +00:00
scsi lib/scsi: Remove inclusion of SPDK event library 2020-06-01 09:20:41 +00:00
sock sock/net_framework: Adding a static inline function to get next framework. 2020-06-17 07:21:28 +00:00
thread thread: add info logs 2020-06-12 15:40:31 +00:00
trace mk/lib: add a check that major and minor version is set for libs. 2020-05-21 09:19:00 +00:00
ut_mock mk/lib: add a check that major and minor version is set for libs. 2020-05-21 09:19:00 +00:00
util lib/util: remove _spdk prefix from functions. 2020-06-01 13:07:30 +00:00
vhost vhost: fix vhost_blk_destroy issue 2020-06-19 07:19:20 +00:00
virtio lib/makefile: move vhost_user.c into lib/virtio directory 2020-06-09 07:37:43 +00:00
vmd mk/lib: add a check that major and minor version is set for libs. 2020-05-21 09:19:00 +00:00
Makefile rdma: Intorduce RDMA providers 2020-05-20 12:03:50 +00:00