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 <daniel.verkamp@intel.com> Reviewed-on: https://review.gerrithub.io/376020 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Ziye Yang <optimistyzy@gmail.com>
This commit is contained in:
parent
e83f976743
commit
1e714cfe22
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user