Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
de23077e
K
Kernel
项目概览
openeuler
/
Kernel
接近 2 年 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
de23077e
编写于
5月 24, 2022
作者:
J
Jens Axboe
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
io_uring: set completion results upfront
Signed-off-by:
N
Jens Axboe
<
axboe@kernel.dk
>
上级
e27f928e
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
22 addition
and
12 deletion
+22
-12
io_uring/io_uring.c
io_uring/io_uring.c
+9
-12
io_uring/io_uring.h
io_uring/io_uring.h
+13
-0
未找到文件。
io_uring/io_uring.c
浏览文件 @
de23077e
...
...
@@ -91,6 +91,7 @@
#include "io-wq.h"
#include "io_uring_types.h"
#include "io_uring.h"
#define IORING_MAX_ENTRIES 32768
#define IORING_MAX_CQ_ENTRIES (2 * IORING_MAX_ENTRIES)
...
...
@@ -1876,21 +1877,15 @@ static void io_req_complete_post(struct io_kiocb *req, s32 res, u32 cflags)
io_cqring_ev_posted
(
ctx
);
}
static
inline
void
io_req_complete_state
(
struct
io_kiocb
*
req
,
s32
res
,
u32
cflags
)
{
req
->
cqe
.
res
=
res
;
req
->
cqe
.
flags
=
cflags
;
req
->
flags
|=
REQ_F_COMPLETE_INLINE
;
}
static
inline
void
__io_req_complete
(
struct
io_kiocb
*
req
,
unsigned
issue_flags
,
s32
res
,
u32
cflags
)
{
if
(
issue_flags
&
IO_URING_F_COMPLETE_DEFER
)
io_req_complete_state
(
req
,
res
,
cflags
);
else
if
(
issue_flags
&
IO_URING_F_COMPLETE_DEFER
)
{
io_req_set_res
(
req
,
res
,
cflags
);
req
->
flags
|=
REQ_F_COMPLETE_INLINE
;
}
else
{
io_req_complete_post
(
req
,
res
,
cflags
);
}
}
static
inline
void
io_req_complete
(
struct
io_kiocb
*
req
,
s32
res
)
...
...
@@ -2749,7 +2744,8 @@ static inline void io_req_task_complete(struct io_kiocb *req, bool *locked)
int
res
=
req
->
cqe
.
res
;
if
(
*
locked
)
{
io_req_complete_state
(
req
,
res
,
io_put_kbuf
(
req
,
0
));
io_req_set_res
(
req
,
res
,
io_put_kbuf
(
req
,
0
));
req
->
flags
|=
REQ_F_COMPLETE_INLINE
;
io_req_add_compl_list
(
req
);
}
else
{
io_req_complete_post
(
req
,
res
,
...
...
@@ -4394,6 +4390,7 @@ void io_uring_cmd_done(struct io_uring_cmd *ioucmd, ssize_t ret, ssize_t res2)
if
(
ret
<
0
)
req_set_fail
(
req
);
io_req_set_res
(
req
,
0
,
ret
);
if
(
req
->
ctx
->
flags
&
IORING_SETUP_CQE32
)
io_req_set_cqe32_extra
(
req
,
res2
,
0
);
io_req_complete
(
req
,
ret
);
...
...
io_uring/io_uring.h
0 → 100644
浏览文件 @
de23077e
#ifndef IOU_CORE_H
#define IOU_CORE_H
#include <linux/errno.h>
#include "io_uring_types.h"
static
inline
void
io_req_set_res
(
struct
io_kiocb
*
req
,
s32
res
,
u32
cflags
)
{
req
->
cqe
.
res
=
res
;
req
->
cqe
.
flags
=
cflags
;
}
#endif
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录