From 1e714cfe22fa48f29fdb5e743195b5fc84ab0af6 Mon Sep 17 00:00:00 2001 From: Daniel Verkamp Date: Mon, 28 Aug 2017 12:36:22 -0700 Subject: [PATCH] nvmf: factor out invalid connect response helpers These were duplicated in ctrlr.c and request.c; pull them into nvmf_internal.h so there's only one copy. Change-Id: I00d499dd17689e907c182d01e61bde075d217af8 Signed-off-by: Daniel Verkamp Reviewed-on: https://review.gerrithub.io/376020 Tested-by: SPDK Automated Test System Reviewed-by: Jim Harris Reviewed-by: Ziye Yang --- lib/nvmf/ctrlr.c | 30 +++++++++--------------------- lib/nvmf/nvmf_internal.h | 15 +++++++++++++++ lib/nvmf/request.c | 17 +++-------------- 3 files changed, 27 insertions(+), 35 deletions(-) diff --git a/lib/nvmf/ctrlr.c b/lib/nvmf/ctrlr.c index f5c90178a..c4997a822 100644 --- a/lib/nvmf/ctrlr.c +++ b/lib/nvmf/ctrlr.c @@ -154,15 +154,6 @@ spdk_nvmf_ctrlr_destruct(struct spdk_nvmf_ctrlr *ctrlr) ctrlr_destruct(ctrlr); } -static void -invalid_connect_response(struct spdk_nvmf_fabric_connect_rsp *rsp, uint8_t iattr, uint16_t ipo) -{ - rsp->status.sct = SPDK_NVME_SCT_COMMAND_SPECIFIC; - rsp->status.sc = SPDK_NVMF_FABRIC_SC_INVALID_PARAM; - rsp->status_code_specific.invalid.iattr = iattr; - rsp->status_code_specific.invalid.ipo = ipo; -} - void spdk_nvmf_ctrlr_connect(struct spdk_nvmf_qpair *qpair, struct spdk_nvmf_fabric_connect_cmd *cmd, @@ -173,9 +164,6 @@ spdk_nvmf_ctrlr_connect(struct spdk_nvmf_qpair *qpair, struct spdk_nvmf_ctrlr *ctrlr; struct spdk_nvmf_subsystem *subsystem; -#define INVALID_CONNECT_CMD(field) invalid_connect_response(rsp, 0, offsetof(struct spdk_nvmf_fabric_connect_cmd, field)) -#define INVALID_CONNECT_DATA(field) invalid_connect_response(rsp, 1, offsetof(struct spdk_nvmf_fabric_connect_data, field)) - SPDK_DEBUGLOG(SPDK_TRACE_NVMF, "recfmt 0x%x qid %u sqsize %u\n", cmd->recfmt, cmd->qid, cmd->sqsize); @@ -200,7 +188,7 @@ spdk_nvmf_ctrlr_connect(struct spdk_nvmf_qpair *qpair, subsystem = spdk_nvmf_tgt_find_subsystem(tgt, data->subnqn); if (subsystem == NULL) { SPDK_ERRLOG("Could not find subsystem '%s'\n", data->subnqn); - INVALID_CONNECT_DATA(subnqn); + SPDK_NVMF_INVALID_CONNECT_DATA(rsp, subnqn); return; } @@ -211,7 +199,7 @@ spdk_nvmf_ctrlr_connect(struct spdk_nvmf_qpair *qpair, if (cmd->sqsize == 0 || cmd->sqsize >= tgt->opts.max_queue_depth) { SPDK_ERRLOG("Invalid SQSIZE %u (min 1, max %u)\n", cmd->sqsize, tgt->opts.max_queue_depth - 1); - INVALID_CONNECT_CMD(sqsize); + SPDK_NVMF_INVALID_CONNECT_CMD(rsp, sqsize); return; } qpair->sq_head_max = cmd->sqsize; @@ -225,7 +213,7 @@ spdk_nvmf_ctrlr_connect(struct spdk_nvmf_qpair *qpair, if (data->cntlid != 0xFFFF) { /* This NVMf target only supports dynamic mode. */ SPDK_ERRLOG("The NVMf target only supports dynamic mode (CNTLID = 0x%x).\n", data->cntlid); - INVALID_CONNECT_DATA(cntlid); + SPDK_NVMF_INVALID_CONNECT_DATA(rsp, cntlid); return; } @@ -251,33 +239,33 @@ spdk_nvmf_ctrlr_connect(struct spdk_nvmf_qpair *qpair, } if (ctrlr == NULL) { SPDK_ERRLOG("Unknown controller ID 0x%x\n", data->cntlid); - INVALID_CONNECT_DATA(cntlid); + SPDK_NVMF_INVALID_CONNECT_DATA(rsp, cntlid); return; } if (ctrlr->subsys->subtype == SPDK_NVMF_SUBTYPE_DISCOVERY) { SPDK_ERRLOG("I/O connect not allowed on discovery controller\n"); - INVALID_CONNECT_CMD(qid); + SPDK_NVMF_INVALID_CONNECT_CMD(rsp, qid); return; } if (!ctrlr->vcprop.cc.bits.en) { SPDK_ERRLOG("Got I/O connect before ctrlr was enabled\n"); - INVALID_CONNECT_CMD(qid); + SPDK_NVMF_INVALID_CONNECT_CMD(rsp, qid); return; } if (1u << ctrlr->vcprop.cc.bits.iosqes != sizeof(struct spdk_nvme_cmd)) { SPDK_ERRLOG("Got I/O connect with invalid IOSQES %u\n", ctrlr->vcprop.cc.bits.iosqes); - INVALID_CONNECT_CMD(qid); + SPDK_NVMF_INVALID_CONNECT_CMD(rsp, qid); return; } if (1u << ctrlr->vcprop.cc.bits.iocqes != sizeof(struct spdk_nvme_cpl)) { SPDK_ERRLOG("Got I/O connect with invalid IOCQES %u\n", ctrlr->vcprop.cc.bits.iocqes); - INVALID_CONNECT_CMD(qid); + SPDK_NVMF_INVALID_CONNECT_CMD(rsp, qid); return; } @@ -290,7 +278,7 @@ spdk_nvmf_ctrlr_connect(struct spdk_nvmf_qpair *qpair, } if (spdk_nvmf_poll_group_add(ctrlr->group, qpair)) { - INVALID_CONNECT_CMD(qid); + SPDK_NVMF_INVALID_CONNECT_CMD(rsp, qid); return; } } diff --git a/lib/nvmf/nvmf_internal.h b/lib/nvmf/nvmf_internal.h index 75686d53b..b08c82704 100644 --- a/lib/nvmf/nvmf_internal.h +++ b/lib/nvmf/nvmf_internal.h @@ -259,6 +259,21 @@ _spdk_nvmf_subsystem_get_ns(struct spdk_nvmf_subsystem *subsystem, uint32_t nsid return ns; } +static inline void +spdk_nvmf_invalid_connect_response(struct spdk_nvmf_fabric_connect_rsp *rsp, + uint8_t iattr, uint16_t ipo) +{ + rsp->status.sct = SPDK_NVME_SCT_COMMAND_SPECIFIC; + rsp->status.sc = SPDK_NVMF_FABRIC_SC_INVALID_PARAM; + rsp->status_code_specific.invalid.iattr = iattr; + rsp->status_code_specific.invalid.ipo = ipo; +} + +#define SPDK_NVMF_INVALID_CONNECT_CMD(rsp, field) \ + spdk_nvmf_invalid_connect_response(rsp, 0, offsetof(struct spdk_nvmf_fabric_connect_cmd, field)) +#define SPDK_NVMF_INVALID_CONNECT_DATA(rsp, field) \ + spdk_nvmf_invalid_connect_response(rsp, 1, offsetof(struct spdk_nvmf_fabric_connect_data, field)) + #define OBJECT_NVMF_IO 0x30 #define TRACE_GROUP_NVMF 0x3 diff --git a/lib/nvmf/request.c b/lib/nvmf/request.c index 9f11fbe5d..6365f9bbf 100644 --- a/lib/nvmf/request.c +++ b/lib/nvmf/request.c @@ -108,15 +108,6 @@ nvmf_process_property_set(struct spdk_nvmf_request *req) return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; } -static void -invalid_connect_response(struct spdk_nvmf_fabric_connect_rsp *rsp, uint8_t iattr, uint16_t ipo) -{ - rsp->status.sct = SPDK_NVME_SCT_COMMAND_SPECIFIC; - rsp->status.sc = SPDK_NVMF_FABRIC_SC_INVALID_PARAM; - rsp->status_code_specific.invalid.iattr = iattr; - rsp->status_code_specific.invalid.ipo = ipo; -} - static spdk_nvmf_request_exec_status nvmf_process_connect(struct spdk_nvmf_request *req) { @@ -128,8 +119,6 @@ nvmf_process_connect(struct spdk_nvmf_request *req) struct spdk_nvmf_fabric_connect_rsp *rsp = &req->rsp->connect_rsp; void *end; -#define INVALID_CONNECT_DATA(field) invalid_connect_response(rsp, 1, offsetof(struct spdk_nvmf_fabric_connect_data, field)) - if (cmd->recfmt != 0) { SPDK_ERRLOG("Connect command unsupported RECFMT %u\n", cmd->recfmt); rsp->status.sct = SPDK_NVME_SCT_COMMAND_SPECIFIC; @@ -147,14 +136,14 @@ nvmf_process_connect(struct spdk_nvmf_request *req) end = memchr(data->subnqn, '\0', SPDK_NVMF_NQN_MAX_LEN + 1); if (!end) { SPDK_ERRLOG("Connect SUBNQN is not null terminated\n"); - INVALID_CONNECT_DATA(subnqn); + SPDK_NVMF_INVALID_CONNECT_DATA(rsp, subnqn); return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; } end = memchr(data->hostnqn, '\0', SPDK_NVMF_NQN_MAX_LEN + 1); if (!end) { SPDK_ERRLOG("Connect HOSTNQN is not null terminated\n"); - INVALID_CONNECT_DATA(hostnqn); + SPDK_NVMF_INVALID_CONNECT_DATA(rsp, hostnqn); return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; } @@ -163,7 +152,7 @@ nvmf_process_connect(struct spdk_nvmf_request *req) subsystem = spdk_nvmf_tgt_find_subsystem(tgt, data->subnqn); if (subsystem == NULL) { SPDK_ERRLOG("Could not find subsystem '%s'\n", data->subnqn); - INVALID_CONNECT_DATA(subnqn); + SPDK_NVMF_INVALID_CONNECT_DATA(rsp, subnqn); return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; }