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队列*/ -->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与不同传输类型的公共接口的更多相关文章
- 关于ajax提交的公共接口的一大用处
在项目框架搭建的时候,就写了ajax提交的公共接口,是想统一的日志和处理ajax返回的错误信息. 今天,却又帮我解决了另外一个问题:每次点开某个页面,有一个ajax请求总是会调用两次,于是打开chro ...
- 不要在公共接口中传递STL容器
最近的一个项目,是开发一个framework,提供给公司内部不同的产品线使用. 之间遇到的一个问题,就是STL容器的使用, 而结论是不要在公共接口中传递STL容器: 这里说的STL容器,但主要则是指容 ...
- Java的代理模式(通过公共接口实现)
代理模式的一种常见的实现方案是,定义一个接口或抽象类,并派生出目标子类,和代理子类.我们要操作的是目标子类里的方法,而很多时候,我们需要为目录子类中的方法增加额外的处理,如果增加日志功能.条件判断等, ...
- Tomcat中组件的生命周期管理公共接口Lifecycle
Tomcat的组件都会实现一个Lifecycle接口,以方便组件的生命周期的统一管理 interface Lifecycle 组件生命周期中主要的几个方法 增加监听器,事件委托机制 public vo ...
- WebService常用公共接口
Web Service 一些对外公开的网络服务接口 商业和贸易: 1.股票行情数据 WEB 服务(支持香港.深圳.上海基金.债券和股票:支持多股票同时查询) Endpoint: http://we ...
- 微信小程序:优化接口代码-提取公共接口路径
方法一.将公共部分提取出来定义为baseURL变量 简化url,把里面公共部分提取出来.如https://api-hmugo-web.itheima.net/api/public/v1/categor ...
- jsonp——使用公共接口获取数据
demo: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8 ...
- 从接口、抽象类到工厂模式再到JVM来总结一些问题
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习! 涉及到的知识点总结如下: 为什么使用接口? 接口和抽象类的区别 简单工厂模式总结 Java中new和newInstance的区别 J ...
- 初识C#接口
C# 接口(Interface) 接口定义了所有类继承接口时应遵循的语法合同.接口定义了语法合同 "是什么" 部分,派生类定义了语法合同 "怎么做" 部分. 接 ...
随机推荐
- 逻辑卷管理(LVM)-迁移
逻辑卷管理(LVM)-迁移 更换卷组中逻辑卷中的一块硬盘流程:1确保卷组剩余空间大于需要更换的空间(缩减或添加添加新空间)-2迁移-3从卷组删除-4删除物理卷 #移除sdc1 1.查看卷组可用空间是否 ...
- javascript中DOM获取和设置元素的内容、样式及效果
getElementById() 根据id获取dom元素 没有找到则返会Null <!DOCTYPE html> <html lang="en"> < ...
- Upx 压缩go编译的程序 frp
1. frp 程序占用大 .路由器 不够空间 2. UPX 下载地址 https://github.com/upx/upx/releases/ 3. 压缩命令 upx.exe -9 C ...
- maven的核心概念——继承
15.1 为什么需要继承机制 由于非compile范围的依赖信息是不能在“依赖链”中传递的,所以有需要的工程只能单独配置.例如: Hello <dependency> <groupI ...
- Kali Linux中Chrome浏览器不能启动的问题
kali中自带了Chromium Web Browser,我点了几次没反应.我还以为是Chrome的版本问题.于是下载了Chrome的deb包. 安装中还解决了一个包依赖问题.安装成功还是不能启动.于 ...
- 止损+TS
单策略单品种单策略多品种多策略单品种和加仓多策略多品种静态仓位和动态仓位 金肯特钠(kingKeltner)布林强盗(BollingerBandit)动态突破(DynamicBreakOutII)恒温 ...
- 深度优先搜索DFS---01背包问题(1)
题目: 有n件物品,每件物品的重量为w[i],价值为c[i].现在需要选出若干件物品放入一个容量为 V 的背包中,使得在选入背包的物品重量之和,不超过容量V的前提下,让北欧保重物品的价值之和最大,求最 ...
- burpsuite抓取小程序的数据包(指定DNS)
目标:burpsuite抓取微信小程序的数据包,而且该系统需指定DNS!否则无法访问! 大家都知道小程序是https传输的,所以手机端是需要安装burp证书的. 已忽略安装证书的步骤,可自己百度搜索, ...
- Ansible之优化提升执行效率
今天分享一下Ansible在工作环境中有那些可以优化的配置 环境介绍:以前在公司工作处理服务器问题,需要用批量操作都是用shell脚本编写的工具,后来发现Ansible这个自动化工具,安装简单,操作起 ...
- React.js高阶函数的定义与使用
/* 高阶函数的简单定义与使用 一: 先定义一个普通组件 二: 用function higherOrder(WrappendComponent) { return } 将组件包裹起来,并用export ...