zoukankan      html  css  js  c++  java
  • SPDK-nvmf与不同传输类型的公共接口

    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);
    	}
    }
    
  • 相关阅读:
    Hadoop 0.23.1 Release Notes
    maven编译参数
    Hadoop快速入门
    HTML Parser HTML Parser
    EasyHadoop v1.0
    Hudson+Maven+SVN 快速搭建持续集成环境
    对技术要有足够的尊重和敬畏
    hudson设置
    python之强大的日志模块 竹叶青 的专栏 博客频道 CSDN.NET
    PHP学习之七:错误控制运算符
  • 原文地址:https://www.cnblogs.com/JamesLi/p/11525931.html
Copyright © 2011-2022 走看看