From 6631c2a8aa11327c686523693d80421b9d52bb60 Mon Sep 17 00:00:00 2001 From: Konrad Sztyber Date: Wed, 8 Dec 2021 14:42:38 +0100 Subject: [PATCH] nvmf/tcp: initialize zcopy phase in nvmf_tcp_req_get Signed-off-by: Konrad Sztyber Change-Id: Ia74148fb36733deaf7b2f833ac0247859311a805 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/10794 Community-CI: Broadcom CI Tested-by: SPDK CI Jenkins Reviewed-by: Aleksey Marchuk Reviewed-by: Jim Harris Reviewed-by: Ben Walker --- lib/nvmf/ctrlr.c | 2 +- lib/nvmf/tcp.c | 1 + test/unit/lib/nvmf/ctrlr.c/ctrlr_ut.c | 9 +++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/nvmf/ctrlr.c b/lib/nvmf/ctrlr.c index 359ffc032..1d67d7b87 100644 --- a/lib/nvmf/ctrlr.c +++ b/lib/nvmf/ctrlr.c @@ -3709,7 +3709,7 @@ nvmf_ctrlr_use_zcopy(struct spdk_nvmf_request *req) struct spdk_nvmf_transport *transport = req->qpair->transport; struct spdk_nvmf_ns *ns; - req->zcopy_phase = NVMF_ZCOPY_PHASE_NONE; + assert(req->zcopy_phase == NVMF_ZCOPY_PHASE_NONE); if (!transport->opts.zcopy) { return false; diff --git a/lib/nvmf/tcp.c b/lib/nvmf/tcp.c index f3e9df13d..d2ea4cd4f 100644 --- a/lib/nvmf/tcp.c +++ b/lib/nvmf/tcp.c @@ -397,6 +397,7 @@ nvmf_tcp_req_get(struct spdk_nvmf_tcp_qpair *tqpair) tcp_req->h2c_offset = 0; tcp_req->has_in_capsule_data = false; tcp_req->req.dif_enabled = false; + tcp_req->req.zcopy_phase = NVMF_ZCOPY_PHASE_NONE; TAILQ_REMOVE(&tqpair->tcp_req_free_queue, tcp_req, state_link); TAILQ_INSERT_TAIL(&tqpair->tcp_req_working_queue, tcp_req, state_link); diff --git a/test/unit/lib/nvmf/ctrlr.c/ctrlr_ut.c b/test/unit/lib/nvmf/ctrlr.c/ctrlr_ut.c index 499b0ee94..6a36b15e4 100644 --- a/test/unit/lib/nvmf/ctrlr.c/ctrlr_ut.c +++ b/test/unit/lib/nvmf/ctrlr.c/ctrlr_ut.c @@ -2337,6 +2337,7 @@ test_nvmf_ctrlr_use_zcopy(void) req.qpair = &qpair; req.cmd = &cmd; + req.zcopy_phase = NVMF_ZCOPY_PHASE_NONE; /* Admin queue */ qpair.qid = 0; @@ -2374,6 +2375,7 @@ test_nvmf_ctrlr_use_zcopy(void) /* Success */ CU_ASSERT(nvmf_ctrlr_use_zcopy(&req)); + CU_ASSERT(req.zcopy_phase == NVMF_ZCOPY_PHASE_INIT); } static void @@ -2442,6 +2444,7 @@ test_spdk_nvmf_request_zcopy_start(void) req.qpair = &qpair; req.cmd = (union nvmf_h2c_msg *)&cmd; req.rsp = &rsp; + req.zcopy_phase = NVMF_ZCOPY_PHASE_NONE; cmd.opc = SPDK_NVME_OPC_READ; /* Fail because no controller */ @@ -2453,6 +2456,7 @@ test_spdk_nvmf_request_zcopy_start(void) CU_ASSERT_EQUAL(rsp.nvme_cpl.status.sct, SPDK_NVME_SCT_GENERIC); CU_ASSERT_EQUAL(rsp.nvme_cpl.status.sc, SPDK_NVME_SC_COMMAND_SEQUENCE_ERROR); qpair.ctrlr = &ctrlr; + req.zcopy_phase = NVMF_ZCOPY_PHASE_NONE; /* Fail because bad NSID */ CU_ASSERT(nvmf_ctrlr_use_zcopy(&req)); @@ -2463,6 +2467,7 @@ test_spdk_nvmf_request_zcopy_start(void) CU_ASSERT_EQUAL(rsp.nvme_cpl.status.sct, SPDK_NVME_SCT_GENERIC); CU_ASSERT_EQUAL(rsp.nvme_cpl.status.sc, SPDK_NVME_SC_INVALID_NAMESPACE_OR_FORMAT); cmd.nsid = 1; + req.zcopy_phase = NVMF_ZCOPY_PHASE_NONE; /* Fail because bad Channel */ CU_ASSERT(nvmf_ctrlr_use_zcopy(&req)); @@ -2473,6 +2478,7 @@ test_spdk_nvmf_request_zcopy_start(void) CU_ASSERT_EQUAL(rsp.nvme_cpl.status.sct, SPDK_NVME_SCT_GENERIC); CU_ASSERT_EQUAL(rsp.nvme_cpl.status.sc, SPDK_NVME_SC_INVALID_NAMESPACE_OR_FORMAT); ns_info.channel = &io_ch; + req.zcopy_phase = NVMF_ZCOPY_PHASE_NONE; /* Queue the requet because NSID is not active */ CU_ASSERT(nvmf_ctrlr_use_zcopy(&req)); @@ -2483,6 +2489,7 @@ test_spdk_nvmf_request_zcopy_start(void) CU_ASSERT_EQUAL(TAILQ_FIRST(&sgroups.queued), &req); ns_info.state = SPDK_NVMF_SUBSYSTEM_ACTIVE; TAILQ_REMOVE(&sgroups.queued, &req, link); + req.zcopy_phase = NVMF_ZCOPY_PHASE_NONE; /* Fail because QPair is not active */ CU_ASSERT(nvmf_ctrlr_use_zcopy(&req)); @@ -2493,6 +2500,7 @@ test_spdk_nvmf_request_zcopy_start(void) CU_ASSERT(req.zcopy_phase == NVMF_ZCOPY_PHASE_INIT_FAILED); qpair.state = SPDK_NVMF_QPAIR_ACTIVE; qpair.state_cb = NULL; + req.zcopy_phase = NVMF_ZCOPY_PHASE_NONE; /* Fail because nvmf_bdev_ctrlr_zcopy_start fails */ CU_ASSERT(nvmf_ctrlr_use_zcopy(&req)); @@ -2504,6 +2512,7 @@ test_spdk_nvmf_request_zcopy_start(void) CU_ASSERT_EQUAL(req.zcopy_phase, NVMF_ZCOPY_PHASE_INIT_FAILED); cmd.cdw10 = 0; cmd.cdw12 = 0; + req.zcopy_phase = NVMF_ZCOPY_PHASE_NONE; /* Success */ CU_ASSERT(nvmf_ctrlr_use_zcopy(&req));