From 399529aaa1800e973d0ae12a0b75e1b3661448a0 Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Tue, 21 Jan 2020 10:04:06 -0700 Subject: [PATCH] nvmf/tcp: Set max h2c size equal to max I/O size We can always accept up to the maximum I/O size in an H2C, so eliminate the #define. Change-Id: I349dab5f9b6ec482a7c580b1396e03c8d30a250b Signed-off-by: Ben Walker Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/482278 Community-CI: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Shuhei Matsumoto Reviewed-by: Alexey Marchuk Tested-by: SPDK CI Jenkins --- lib/nvmf/tcp.c | 23 +++++------------------ test/unit/lib/nvmf/tcp.c/tcp_ut.c | 3 ++- 2 files changed, 7 insertions(+), 19 deletions(-) diff --git a/lib/nvmf/tcp.c b/lib/nvmf/tcp.c index e61e17a40..790ae632e 100644 --- a/lib/nvmf/tcp.c +++ b/lib/nvmf/tcp.c @@ -52,7 +52,6 @@ #define NVMF_TCP_MAX_ACCEPT_SOCK_ONE_TIME 16 -#define NVMF_TCP_PDU_MAX_H2C_DATA_SIZE 131072 #define NVMF_TCP_PDU_MAX_C2H_DATA_SIZE 131072 #define SPDK_NVMF_TCP_DEFAULT_MAX_SOCK_PRIORITY 6 #define SPDK_NVMF_TCP_RECV_BUF_SIZE_FACTOR 4 @@ -236,9 +235,6 @@ struct spdk_nvmf_tcp_qpair { bool host_hdgst_enable; bool host_ddgst_enable; - /** Specifies the maximum number of PDU-Data bytes per H2C Data Transfer PDU */ - uint32_t maxh2cdata; - uint32_t c2h_data_pdu_cnt; /* IP address */ @@ -1309,15 +1305,8 @@ spdk_nvmf_tcp_h2c_data_hdr_handle(struct spdk_nvmf_tcp_transport *ttransport, if (tcp_req->next_expected_r2t_offset != h2c_data->datao) { SPDK_DEBUGLOG(SPDK_LOG_NVMF_TCP, - "tcp_req(%p), tqpair=%p, expected_r2t_offset=%u, but data offset =%u\n", - tcp_req, tqpair, tcp_req->next_expected_r2t_offset, h2c_data->datao); - fes = SPDK_NVME_TCP_TERM_REQ_FES_DATA_TRANSFER_OUT_OF_RANGE; - goto err; - } - - if (h2c_data->datal > tqpair->maxh2cdata) { - SPDK_DEBUGLOG(SPDK_LOG_NVMF_TCP, "tcp_req(%p), tqpair=%p, datao=%u execeeds maxh2cdata size=%u\n", - tcp_req, tqpair, h2c_data->datao, tqpair->maxh2cdata); + "tcp_req(%p), tqpair=%p, data offset 0, but data offset =%u\n", + tcp_req, tqpair, h2c_data->datao); fes = SPDK_NVME_TCP_TERM_REQ_FES_DATA_TRANSFER_OUT_OF_RANGE; goto err; } @@ -1326,7 +1315,7 @@ spdk_nvmf_tcp_h2c_data_hdr_handle(struct spdk_nvmf_tcp_transport *ttransport, SPDK_DEBUGLOG(SPDK_LOG_NVMF_TCP, "tcp_req(%p), tqpair=%p, (datao=%u + datal=%u) execeeds requested length=%u\n", tcp_req, tqpair, h2c_data->datao, h2c_data->datal, tcp_req->req.length); - fes = SPDK_NVME_TCP_TERM_REQ_FES_R2T_LIMIT_EXCEEDED; + fes = SPDK_NVME_TCP_TERM_REQ_FES_DATA_TRANSFER_OUT_OF_RANGE; goto err; } @@ -1425,7 +1414,7 @@ spdk_nvmf_tcp_send_r2t_pdu(struct spdk_nvmf_tcp_qpair *tqpair, r2t->cccid = tcp_req->req.cmd->nvme_cmd.cid; r2t->ttag = tcp_req->ttag; r2t->r2to = tcp_req->next_expected_r2t_offset; - r2t->r2tl = spdk_min(tcp_req->req.length - tcp_req->next_expected_r2t_offset, tqpair->maxh2cdata); + r2t->r2tl = tcp_req->req.length; tcp_req->r2tl_remain = r2t->r2tl; SPDK_DEBUGLOG(SPDK_LOG_NVMF_TCP, @@ -1603,9 +1592,7 @@ spdk_nvmf_tcp_icreq_handle(struct spdk_nvmf_tcp_transport *ttransport, ic_resp->common.hlen = ic_resp->common.plen = sizeof(*ic_resp); ic_resp->pfv = 0; ic_resp->cpda = tqpair->cpda; - tqpair->maxh2cdata = spdk_min(NVMF_TCP_PDU_MAX_H2C_DATA_SIZE, - ttransport->transport.opts.io_unit_size); - ic_resp->maxh2cdata = tqpair->maxh2cdata; + ic_resp->maxh2cdata = ttransport->transport.opts.max_io_size; ic_resp->dgst.bits.hdgst_enable = tqpair->host_hdgst_enable ? 1 : 0; ic_resp->dgst.bits.ddgst_enable = tqpair->host_ddgst_enable ? 1 : 0; diff --git a/test/unit/lib/nvmf/tcp.c/tcp_ut.c b/test/unit/lib/nvmf/tcp.c/tcp_ut.c index 6934d652e..2c01f3fc9 100644 --- a/test/unit/lib/nvmf/tcp.c/tcp_ut.c +++ b/test/unit/lib/nvmf/tcp.c/tcp_ut.c @@ -580,6 +580,8 @@ test_nvmf_tcp_send_c2h_data(void) spdk_thread_destroy(thread); } +#define NVMF_TCP_PDU_MAX_H2C_DATA_SIZE (128 * 1024) + static void test_nvmf_tcp_h2c_data_hdr_handle(void) { @@ -591,7 +593,6 @@ test_nvmf_tcp_h2c_data_hdr_handle(void) pdu.hdr = &pdu.hdr_mem; TAILQ_INIT(&tqpair.state_queue[TCP_REQUEST_STATE_TRANSFERRING_HOST_TO_CONTROLLER]); - tqpair.maxh2cdata = NVMF_TCP_PDU_MAX_H2C_DATA_SIZE; /* Set qpair state to make unrelated operations NOP */ tqpair.state = NVME_TCP_QPAIR_STATE_RUNNING;