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);
    	}
    }
    
  • 相关阅读:
    (转)Android 判断用户2G/3G/4G移动数据网络
    Android Studio导入第三方类库的方法
    jxbrowser java代码直接调用js代码
    jxbrowser 实现java 和 js互相调用
    jxbrowser 实现自定义右键菜单
    jxbrowser 监听所有网络请求 jxbrowser 系列教程2
    JxBrowser开启调试模式,JxBrowser debug
    MySQL查看数据库表容量大小
    thinkphp5使用PHPMailler发送邮件
    phpstorm psr2样式.xml
  • 原文地址:https://www.cnblogs.com/JamesLi/p/11525931.html
Copyright © 2011-2022 走看看