diff --git a/lib/nvme/nvme_tcp.c b/lib/nvme/nvme_tcp.c index 1480d0d51..82f0734b8 100644 --- a/lib/nvme/nvme_tcp.c +++ b/lib/nvme/nvme_tcp.c @@ -989,13 +989,13 @@ nvme_tcp_send_icreq_complete(void *cb_arg) { struct nvme_tcp_qpair *tqpair = cb_arg; - SPDK_DEBUGLOG(nvme, "Complete the icreq send for tqpair=%p\n", tqpair); + SPDK_DEBUGLOG(nvme, "Complete the icreq send for tqpair=%p %u\n", tqpair, tqpair->qpair.id); tqpair->flags.icreq_send_ack = true; if (tqpair->state == NVME_TCP_QPAIR_STATE_INITIALIZING) { - SPDK_DEBUGLOG(nvme, "qpair %u, finilize icresp\n", tqpair->qpair.id); - nvme_tcp_icresp_handle(tqpair, &tqpair->recv_pdu); + SPDK_DEBUGLOG(nvme, "tqpair %p %u, finilize icresp\n", tqpair, tqpair->qpair.id); + tqpair->state = NVME_TCP_QPAIR_STATE_RUNNING; } } @@ -1008,12 +1008,6 @@ nvme_tcp_icresp_handle(struct nvme_tcp_qpair *tqpair, enum spdk_nvme_tcp_term_req_fes fes; int recv_buf_size; - if (!tqpair->flags.icreq_send_ack) { - tqpair->state = NVME_TCP_QPAIR_STATE_INITIALIZING; - SPDK_DEBUGLOG(nvme, "qpair %u, waiting icreq ack\n", tqpair->qpair.id); - return; - } - /* Only PFV 0 is defined currently */ if (ic_resp->pfv != 0) { SPDK_ERRLOG("Expected ICResp PFV %u, got %u\n", 0u, ic_resp->pfv); @@ -1064,8 +1058,15 @@ nvme_tcp_icresp_handle(struct nvme_tcp_qpair *tqpair, /* Not fatal. */ } - tqpair->state = NVME_TCP_QPAIR_STATE_RUNNING; nvme_tcp_qpair_set_recv_state(tqpair, NVME_TCP_PDU_RECV_STATE_AWAIT_PDU_READY); + + if (!tqpair->flags.icreq_send_ack) { + tqpair->state = NVME_TCP_QPAIR_STATE_INITIALIZING; + SPDK_DEBUGLOG(nvme, "tqpair %p %u, waiting icreq ack\n", tqpair, tqpair->qpair.id); + return; + } + + tqpair->state = NVME_TCP_QPAIR_STATE_RUNNING; return; end: nvme_tcp_qpair_send_h2c_term_req(tqpair, pdu, fes, error_offset);