nvme/tcp: simplify state change function

state change function do not need to use swtich to do some work.

Do memset in state machine.

Signed-off-by: MengjinWu <mengjin.wu@intel.com>
Change-Id: Ie66454d8f31860f403171f20858a6b4a24e3c76f
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14502
Community-CI: Mellanox Build Bot
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Xiaodong Liu <xiaodong.liu@intel.com>
This commit is contained in:
MengjinWu 2022-09-14 04:11:43 +00:00 committed by Jim Harris
parent 7a7f21b6fe
commit 31fc5f196f
2 changed files with 11 additions and 48 deletions

View File

@ -801,7 +801,7 @@ nvme_tcp_qpair_abort_reqs(struct spdk_nvme_qpair *qpair, uint32_t dnr)
} }
} }
static void static inline void
nvme_tcp_qpair_set_recv_state(struct nvme_tcp_qpair *tqpair, nvme_tcp_qpair_set_recv_state(struct nvme_tcp_qpair *tqpair,
enum nvme_tcp_pdu_recv_state state) enum nvme_tcp_pdu_recv_state state)
{ {
@ -810,19 +810,7 @@ nvme_tcp_qpair_set_recv_state(struct nvme_tcp_qpair *tqpair,
tqpair, state); tqpair, state);
return; return;
} }
tqpair->recv_state = state; tqpair->recv_state = state;
switch (state) {
case NVME_TCP_PDU_RECV_STATE_AWAIT_PDU_READY:
case NVME_TCP_PDU_RECV_STATE_ERROR:
memset(tqpair->recv_pdu, 0, sizeof(struct nvme_tcp_pdu));
break;
case NVME_TCP_PDU_RECV_STATE_AWAIT_PDU_CH:
case NVME_TCP_PDU_RECV_STATE_AWAIT_PDU_PSH:
case NVME_TCP_PDU_RECV_STATE_AWAIT_PDU_PAYLOAD:
default:
break;
}
} }
static void static void
@ -1623,6 +1611,7 @@ nvme_tcp_read_pdu(struct nvme_tcp_qpair *tqpair, uint32_t *reaped)
switch (tqpair->recv_state) { switch (tqpair->recv_state) {
/* If in a new state */ /* If in a new state */
case NVME_TCP_PDU_RECV_STATE_AWAIT_PDU_READY: case NVME_TCP_PDU_RECV_STATE_AWAIT_PDU_READY:
memset(tqpair->recv_pdu, 0, sizeof(struct nvme_tcp_pdu));
nvme_tcp_qpair_set_recv_state(tqpair, NVME_TCP_PDU_RECV_STATE_AWAIT_PDU_CH); nvme_tcp_qpair_set_recv_state(tqpair, NVME_TCP_PDU_RECV_STATE_AWAIT_PDU_CH);
break; break;
/* common header */ /* common header */
@ -1698,6 +1687,7 @@ nvme_tcp_read_pdu(struct nvme_tcp_qpair *tqpair, uint32_t *reaped)
nvme_tcp_pdu_payload_handle(tqpair, reaped); nvme_tcp_pdu_payload_handle(tqpair, reaped);
break; break;
case NVME_TCP_PDU_RECV_STATE_ERROR: case NVME_TCP_PDU_RECV_STATE_ERROR:
memset(tqpair->recv_pdu, 0, sizeof(struct nvme_tcp_pdu));
rc = NVME_TCP_PDU_FATAL; rc = NVME_TCP_PDU_FATAL;
break; break;
default: default:

View File

@ -787,46 +787,15 @@ static void
test_nvme_tcp_qpair_set_recv_state(void) test_nvme_tcp_qpair_set_recv_state(void)
{ {
struct nvme_tcp_qpair tqpair = {}; struct nvme_tcp_qpair tqpair = {};
enum nvme_tcp_pdu_recv_state state;
struct nvme_tcp_pdu recv_pdu = {};
tqpair.recv_pdu = &recv_pdu;
/* case1: The recv state of tqpair is same with the state to be set */ /* case1: The recv state of tqpair is same with the state to be set */
tqpair.recv_state = NVME_TCP_PDU_RECV_STATE_ERROR; tqpair.recv_state = NVME_TCP_PDU_RECV_STATE_ERROR;
state = NVME_TCP_PDU_RECV_STATE_ERROR; nvme_tcp_qpair_set_recv_state(&tqpair, NVME_TCP_PDU_RECV_STATE_ERROR);
nvme_tcp_qpair_set_recv_state(&tqpair, state);
CU_ASSERT(tqpair.recv_state == state);
/* case2: The recv state of tqpair is different with the state to be set */
/* state is NVME_TCP_PDU_RECV_STATE_AWAIT_PDU_READY or NVME_TCP_PDU_RECV_STATE_ERROR, tqpair->recv_pdu will be cleared */
tqpair.recv_pdu->cb_arg = (void *)0xDEADBEEF;
state = NVME_TCP_PDU_RECV_STATE_AWAIT_PDU_READY;
nvme_tcp_qpair_set_recv_state(&tqpair, state);
CU_ASSERT(tqpair.recv_state == NVME_TCP_PDU_RECV_STATE_AWAIT_PDU_READY);
CU_ASSERT(tqpair.recv_pdu->cb_arg == (void *)0x0);
tqpair.recv_pdu->cb_arg = (void *)0xDEADBEEF;
state = NVME_TCP_PDU_RECV_STATE_ERROR;
nvme_tcp_qpair_set_recv_state(&tqpair, state);
CU_ASSERT(tqpair.recv_state == NVME_TCP_PDU_RECV_STATE_ERROR); CU_ASSERT(tqpair.recv_state == NVME_TCP_PDU_RECV_STATE_ERROR);
CU_ASSERT(tqpair.recv_pdu->cb_arg == (void *)0x0);
/* state is NVME_TCP_PDU_RECV_STATE_AWAIT_PDU_CH or NVME_TCP_PDU_RECV_STATE_AWAIT_PDU_PSH or NVME_TCP_PDU_RECV_STATE_AWAIT_PDU_PAYLOAD or default */ /* Different state will be set accordingly */
state = NVME_TCP_PDU_RECV_STATE_AWAIT_PDU_CH; tqpair.recv_state = NVME_TCP_PDU_RECV_STATE_AWAIT_PDU_READY;
nvme_tcp_qpair_set_recv_state(&tqpair, state); nvme_tcp_qpair_set_recv_state(&tqpair, 0xff);
CU_ASSERT(tqpair.recv_state == NVME_TCP_PDU_RECV_STATE_AWAIT_PDU_CH);
state = NVME_TCP_PDU_RECV_STATE_AWAIT_PDU_PSH;
nvme_tcp_qpair_set_recv_state(&tqpair, state);
CU_ASSERT(tqpair.recv_state == NVME_TCP_PDU_RECV_STATE_AWAIT_PDU_PSH);
state = NVME_TCP_PDU_RECV_STATE_AWAIT_PDU_PAYLOAD;
nvme_tcp_qpair_set_recv_state(&tqpair, state);
CU_ASSERT(tqpair.recv_state == NVME_TCP_PDU_RECV_STATE_AWAIT_PDU_PAYLOAD);
state = 0xff;
nvme_tcp_qpair_set_recv_state(&tqpair, state);
CU_ASSERT(tqpair.recv_state == 0xff); CU_ASSERT(tqpair.recv_state == 0xff);
} }
@ -1424,6 +1393,10 @@ test_nvme_tcp_ctrlr_connect_qpair(void)
rc = nvme_tcp_ctrlr_connect_qpair(&ctrlr, qpair); rc = nvme_tcp_ctrlr_connect_qpair(&ctrlr, qpair);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
/* skip NVME_TCP_PDU_RECV_STATE_AWAIT_PDU_READY state */
/* assume already received the icresp */
tqpair->recv_state = NVME_TCP_PDU_RECV_STATE_AWAIT_PDU_CH;
while (nvme_qpair_get_state(qpair) == NVME_QPAIR_CONNECTING) { while (nvme_qpair_get_state(qpair) == NVME_QPAIR_CONNECTING) {
rc = nvme_tcp_qpair_process_completions(qpair, 0); rc = nvme_tcp_qpair_process_completions(qpair, 0);
CU_ASSERT(rc >= 0); CU_ASSERT(rc >= 0);