首页 > 其他 > 详细

SPDK-nvmf与不同传输类型的公共接口

时间:2019-09-16 11:42:14      阅读:146      评论:0      收藏:0      [点我收藏+]

SPDK-nvmf与不同传输类型的公共接口

不同类型的传输层到nvmf的公共命令请求接口

nvmf_fc_hwqp_handle_request()

  -->cmd_iu = buffer->virt;

   /* struct spdk_nvmf_request req所用内存已经在struct spdk_nvmf_fc_request结构体中申请*/

  -->fc_req = nvmf_fc_hwqp_alloc_fc_request(hwqp);

  -->fc_req->req.qpair = &fc_conn->qpair;  /*qpair的id为0时表示Admin队列*/
  -->fc_req->req.cmd = (union nvmf_h2c_msg *)&cmd_iu->cmd;
  -->fc_req->req.rsp = (union nvmf_c2h_msg *)&fc_req->ersp.rsp;

  -->nvmf_fc_request_execute(fc_req)

    /* 接收数据和处理纯命令分开 */

    -->nvmf_fc_recv_data(fc_req); /* 接收数据 */

    -->spdk_nvmf_request_exec(&fc_req->req); /* 处理命令请求 */

void

spdk_nvmf_request_exec(struct spdk_nvmf_request *req)

spdk_nvmf_rdma_request_process()

  -->spdk_nvmf_request_exec(&rdma_req->req);

tcp_req = spdk_nvmf_tcp_req_get(tqpair);

spdk_nvmf_tcp_req_process()

  -->spdk_nvmf_request_exec(&tcp_req->req);

 

NVMF请求处理公共接口按命令类型分类处理

void
spdk_nvmf_request_exec(struct spdk_nvmf_request *req)
{
    //......

    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);
	}
}

 

SPDK-nvmf与不同传输类型的公共接口

原文:https://www.cnblogs.com/JamesLi/p/11525931.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!