Spdk/lib
Shuhei Matsumoto 438fa38e4a lib/iscsi: Check if data comes really after processing logout request
When the PDU receive handler processes the header of the logout request PDU,
conn->is_logged_out is set to true.

However, if conn->is_logged_out is true, conn->pdu_recv_state is set to ERROR
before the PDU receive handler completes processing the logout request PDU.

Then if conn->pdu_recv_state is ERROR, conn->state is set to EXITING
after returning from the PDU receive handler.

Response PDUs are sent asynchronously now and may not be sent even after
returning from the PDU receive handler.

On the other hand, outside the PDU receive handler, the current connection
is closed if conn->state is EXITING.

Hence logout response PDU may not be sent to the initiator.

For the case that the initiator logs out and then reconnects when receiving
asynchronous logout request, missing logout response is critical
because initiator waits until receiving logout request and gets timeout.

This patch moves the check if PDU comes after logout to the place
just after getting a PDU header.

At the new location, data segment of the PDU is not received yet. But
logout request PDU does not have data segment and initiator will not
send additional PDU after sending logout request PDU, and by this patch,
iSCSI target will continue to stop receiving any new PDU after processing
logout request. Furthermore, even if there is any remaining data in the
kernel buffer, the kernel will discard or flush it when closing the socket.

Fixes issue #1571

Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: I9554f4d54f3db80bf86abd6bffe81bac8c234531
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/3928
Community-CI: Mellanox Build Bot
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ziye Yang <ziye.yang@intel.com>
2020-08-27 08:37:00 +00:00
..
accel lib/accel: change task alloc from global mempool->per chan list 2020-08-21 08:25:04 +00:00
bdev bdev: free g_bdev_examine_allowlist before the app exit 2020-08-25 08:02:43 +00:00
blob lib/blob: remove requirement for md_page alignment 2020-08-24 07:38:00 +00:00
blobfs lib: add checks for return code of pthread_spin_init 2020-07-23 07:25:21 +00:00
conf lib/conf: allow multiple sections with same name 2020-07-22 12:24:08 +00:00
env_dpdk env: fix pci driver registration 2020-08-27 08:36:43 +00:00
env_ocf lib/ocf_env: fix incorrect value for free memory estimate 2020-04-29 06:42:33 +00:00
event lib/event: fix a wrong deletion 2020-08-24 07:38:10 +00:00
ftl lib/ftl: Return SPDK_POLLER_BUSY flag only when writes were submitted 2020-08-11 09:49:51 +00:00
idxd accel: add API to cancel a batch sequence 2020-07-27 22:43:40 +00:00
ioat lib/ioat: Update the major SO version for libspdk_ioat.so 2020-07-24 07:25:47 +00:00
iscsi lib/iscsi: Check if data comes really after processing logout request 2020-08-27 08:37:00 +00:00
json lib: json-nbd remove spdk prefix from static functions. 2020-05-21 09:19:00 +00:00
jsonrpc lib: add checks for return code of pthread_spin_init 2020-07-23 07:25:21 +00:00
log lib/log: add a check for localtime() failure 2020-07-15 07:09:19 +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 nbd: Add the O_DIRECT flag when opening the file. 2020-08-06 22:43:20 +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 env: fix pci driver registration 2020-08-27 08:36:43 +00:00
nvmf lib/nvme: Set ANA transition time value 2020-08-27 08:36:51 +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 rocksdb: Update rocksdb code to work with spdk/rocksdb branch spdk-v6.10.2 2020-08-10 11:27:32 +00:00
rpc RPC: update the error message for current RPC state 2020-07-31 08:21:37 +00:00
rte_vhost read_fd_message: distinguish prints of log message 2020-05-25 09:08:00 +00:00
scsi pollers: Fix pollers to return correct busy status 2020-07-07 07:29:31 +00:00
sock lib/sock: bump SO_VERSION to 4.0 2020-08-10 14:41:16 +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 cpuset: fix parse_mask 2020-08-27 08:34:07 +00:00
vhost vhost-blk: add resize bdev support 2020-07-29 08:05:31 +00:00
virtio lib/virtio: fix heap use after free issue. 2020-08-04 16:56:42 +00:00
vmd env_dpdk/pci: remove device detach callback 2020-07-23 20:48:47 +00:00
Makefile rdma: Intorduce RDMA providers 2020-05-20 12:03:50 +00:00