nvmf/ctrlr: introduce request exec backdoor
It allows to property set (e.g. cc) when subsystem and qpair are not active. Signed-off-by: Jacek Kalwas <jacek.kalwas@intel.com> Change-Id: I0b0d150fbdac5bdf0d20762337f0a811f4d6d243 Signed-off-by: Ben Walker <benjamin.walker@intel.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/481494 Community-CI: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Broadcom SPDK FC-NVMe CI <spdk-ci.pdl@broadcom.com> Reviewed-by: Paul Luse <paul.e.luse@intel.com> Reviewed-by: Alexey Marchuk <alexeymar@mellanox.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
parent
fcca8ea6a9
commit
aaa9630aeb
@ -2748,15 +2748,56 @@ nvmf_trace_command(union nvmf_h2c_msg *h2c_msg, bool is_admin_queue)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_nvmf_request_exec(struct spdk_nvmf_request *req,
|
||||
struct spdk_nvmf_subsystem_poll_group *sgroup)
|
||||
{
|
||||
struct spdk_nvmf_qpair *qpair = req->qpair;
|
||||
spdk_nvmf_request_exec_status status;
|
||||
|
||||
nvmf_trace_command(req->cmd, spdk_nvmf_qpair_is_admin_queue(qpair));
|
||||
|
||||
if (sgroup) {
|
||||
sgroup->io_outstanding++;
|
||||
}
|
||||
|
||||
/* Place the request on the outstanding list so we can keep track of it */
|
||||
TAILQ_INSERT_TAIL(&qpair->outstanding, req, link);
|
||||
|
||||
if (spdk_unlikely(req->cmd->nvmf_cmd.opcode == SPDK_NVME_OPC_FABRIC)) {
|
||||
status = spdk_nvmf_ctrlr_process_fabrics_cmd(req);
|
||||
} else if (spdk_unlikely(spdk_nvmf_qpair_is_admin_queue(qpair))) {
|
||||
status = spdk_nvmf_ctrlr_process_admin_cmd(req);
|
||||
} else {
|
||||
status = spdk_nvmf_ctrlr_process_io_cmd(req);
|
||||
}
|
||||
|
||||
if (status == SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE) {
|
||||
spdk_nvmf_request_complete(req);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
spdk_nvmf_request_exec_fabrics(struct spdk_nvmf_request *req)
|
||||
{
|
||||
struct spdk_nvmf_qpair *qpair = req->qpair;
|
||||
struct spdk_nvmf_subsystem_poll_group *sgroup = NULL;
|
||||
|
||||
assert(req->cmd->nvmf_cmd.opcode == SPDK_NVME_OPC_FABRIC);
|
||||
|
||||
if (qpair->ctrlr) {
|
||||
sgroup = &qpair->group->sgroups[qpair->ctrlr->subsys->id];
|
||||
}
|
||||
|
||||
_nvmf_request_exec(req, sgroup);
|
||||
}
|
||||
|
||||
void
|
||||
spdk_nvmf_request_exec(struct spdk_nvmf_request *req)
|
||||
{
|
||||
struct spdk_nvmf_qpair *qpair = req->qpair;
|
||||
spdk_nvmf_request_exec_status status;
|
||||
struct spdk_nvmf_subsystem_poll_group *sgroup = NULL;
|
||||
|
||||
nvmf_trace_command(req->cmd, spdk_nvmf_qpair_is_admin_queue(qpair));
|
||||
|
||||
if (qpair->ctrlr) {
|
||||
sgroup = &qpair->group->sgroups[qpair->ctrlr->subsys->id];
|
||||
}
|
||||
@ -2781,24 +2822,9 @@ spdk_nvmf_request_exec(struct spdk_nvmf_request *req)
|
||||
TAILQ_INSERT_TAIL(&sgroup->queued, req, link);
|
||||
return;
|
||||
}
|
||||
|
||||
sgroup->io_outstanding++;
|
||||
}
|
||||
|
||||
/* Place the request on the outstanding list so we can keep track of it */
|
||||
TAILQ_INSERT_TAIL(&qpair->outstanding, req, link);
|
||||
|
||||
if (spdk_unlikely(req->cmd->nvmf_cmd.opcode == SPDK_NVME_OPC_FABRIC)) {
|
||||
status = spdk_nvmf_ctrlr_process_fabrics_cmd(req);
|
||||
} else if (spdk_unlikely(spdk_nvmf_qpair_is_admin_queue(qpair))) {
|
||||
status = spdk_nvmf_ctrlr_process_admin_cmd(req);
|
||||
} else {
|
||||
status = spdk_nvmf_ctrlr_process_io_cmd(req);
|
||||
}
|
||||
|
||||
if (status == SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE) {
|
||||
spdk_nvmf_request_complete(req);
|
||||
}
|
||||
_nvmf_request_exec(req, sgroup);
|
||||
}
|
||||
|
||||
static bool
|
||||
|
@ -387,6 +387,7 @@ void spdk_nvmf_poll_group_pause_subsystem(struct spdk_nvmf_poll_group *group,
|
||||
void spdk_nvmf_poll_group_resume_subsystem(struct spdk_nvmf_poll_group *group,
|
||||
struct spdk_nvmf_subsystem *subsystem, spdk_nvmf_poll_group_mod_done cb_fn, void *cb_arg);
|
||||
void spdk_nvmf_request_exec(struct spdk_nvmf_request *req);
|
||||
void spdk_nvmf_request_exec_fabrics(struct spdk_nvmf_request *req);
|
||||
int spdk_nvmf_request_free(struct spdk_nvmf_request *req);
|
||||
int spdk_nvmf_request_complete(struct spdk_nvmf_request *req);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user