[SPDK] Re: SPDK NVMe/TCP target always fail to send C2H_TERM_REQ request

Walker, Benjamin <benjamin.walker at intel.com> Wed, 10 Nov 2021 17:36:39 +0000
Newsgroups dev.linux.lists.spdk
Message-ID <BYAPR11MB282460D3A7A198EE0C533088EF939@BYAPR11MB2824.namprd11.prod.outlook.com>
> From: Wenhua Liu <liuw(a)vmware.com>
> Hi,
> 
> I’m testing our NVMe/TCP initiator for handling C2H_TERM_REQ (PDU type
> 0x3). In order to test it, I intentionally injected an error to a H2CData PDU by
> modifying its data offset field DATAO to an invalid value. This error, if detected
> by the target, will be treated as a fatal transport error with fatal error status FES
> set to 4 (Data Transfer Out of Range).
> 
> When I tested this, I can see SPDK NVMe/TCP target can detect this error and
> set the FES to value 4 as expected, but when sending C2H_TERM_REQ PDU, it
> always fails with a message “IC_RESP or TERM_REQ could not write to socket.”,
> then on host side, the initiator gets the error “Connection reset by peer” when
> receiving data.
> 
> 
> [2021-11-08 00:47:06.795739] tcp.c:1437:nvmf_tcp_h2c_data_hdr_handle:
> *ERROR*: Queue 3, fes 4, offset 0
> 
> [2021-11-08 00:47:06.795879] tcp.c: 837:_tcp_write_pdu: *ERROR*: IC_RESP or
> TERM_REQ could not write to socket.
> 
> What could be the problem here?

It seems like the target went down a code path that closed the socket prior to sending the response, but I don't currently see which code path that would be. Can you file a GitHub issue with all of the relevant information (version especially) so we can take a look at DATAO errors more closely?

Thanks,
Ben