From 4ff3665ce9e86aaed314f1fbba6890270af9c932 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Thu, 11 Jul 2019 07:57:22 +0900 Subject: [PATCH] nvmf: Check DIF insert/strip setting of NVMf controller when getting DIF context The first idea was that the caller of spdk_nvmf_request_get_dif_ctx() should check if the current transport enables DIF insert/strip before calling spdk_nvmf_request_get_dif_ctx(). But NVMf controller knows if DIF/insert/strip is enabled now by the previous patch. Hence spdk_nvmf_request_get_dif_ctx() checks if the NVMf controller enables DIF insert/strip at its head. Signed-off-by: Shuhei Matsumoto Change-Id: I78253d356b694800c3a9a9608514df58e0c631a6 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/461314 Tested-by: SPDK CI Jenkins Reviewed-by: Changpeng Liu Reviewed-by: Darek Stojaczyk --- lib/nvmf/ctrlr.c | 7 ++++++- test/unit/lib/nvmf/ctrlr.c/ctrlr_ut.c | 6 ++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/nvmf/ctrlr.c b/lib/nvmf/ctrlr.c index ffb16799c..98d0f676f 100644 --- a/lib/nvmf/ctrlr.c +++ b/lib/nvmf/ctrlr.c @@ -2652,6 +2652,11 @@ bool spdk_nvmf_request_get_dif_ctx(struct spdk_nvmf_request *req, struct spdk_dif_ctx *dif_ctx) { struct spdk_nvmf_qpair *qpair = req->qpair; + struct spdk_nvmf_ctrlr *ctrlr = qpair->ctrlr; + + if (spdk_likely(ctrlr == NULL || !ctrlr->dif_insert_or_strip)) { + return false; + } if (spdk_unlikely(qpair->state != SPDK_NVMF_QPAIR_ACTIVE)) { return false; @@ -2665,5 +2670,5 @@ spdk_nvmf_request_get_dif_ctx(struct spdk_nvmf_request *req, struct spdk_dif_ctx return false; } - return spdk_nvmf_ctrlr_get_dif_ctx(qpair->ctrlr, &req->cmd->nvme_cmd, dif_ctx); + return spdk_nvmf_ctrlr_get_dif_ctx(ctrlr, &req->cmd->nvme_cmd, dif_ctx); } diff --git a/test/unit/lib/nvmf/ctrlr.c/ctrlr_ut.c b/test/unit/lib/nvmf/ctrlr.c/ctrlr_ut.c index be408c94a..f1639b2ec 100644 --- a/test/unit/lib/nvmf/ctrlr.c/ctrlr_ut.c +++ b/test/unit/lib/nvmf/ctrlr.c/ctrlr_ut.c @@ -1182,6 +1182,12 @@ test_get_dif_ctx(void) ns.bdev = &bdev; + ctrlr.dif_insert_or_strip = false; + + ret = spdk_nvmf_request_get_dif_ctx(&req, &dif_ctx); + CU_ASSERT(ret == false); + + ctrlr.dif_insert_or_strip = true; qpair.state = SPDK_NVMF_QPAIR_UNINITIALIZED; ret = spdk_nvmf_request_get_dif_ctx(&req, &dif_ctx);