Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
36e9f653
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
36e9f653
编写于
4月 11, 2015
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'iov_iter' into for-next
上级
a96114fa
bc917be8
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
71 addition
and
0 deletion
+71
-0
include/linux/uio.h
include/linux/uio.h
+14
-0
lib/iov_iter.c
lib/iov_iter.c
+57
-0
未找到文件。
include/linux/uio.h
浏览文件 @
36e9f653
...
...
@@ -140,4 +140,18 @@ static inline void iov_iter_reexpand(struct iov_iter *i, size_t count)
size_t
csum_and_copy_to_iter
(
void
*
addr
,
size_t
bytes
,
__wsum
*
csum
,
struct
iov_iter
*
i
);
size_t
csum_and_copy_from_iter
(
void
*
addr
,
size_t
bytes
,
__wsum
*
csum
,
struct
iov_iter
*
i
);
int
import_iovec
(
int
type
,
const
struct
iovec
__user
*
uvector
,
unsigned
nr_segs
,
unsigned
fast_segs
,
struct
iovec
**
iov
,
struct
iov_iter
*
i
);
#ifdef CONFIG_COMPAT
struct
compat_iovec
;
int
compat_import_iovec
(
int
type
,
const
struct
compat_iovec
__user
*
uvector
,
unsigned
nr_segs
,
unsigned
fast_segs
,
struct
iovec
**
iov
,
struct
iov_iter
*
i
);
#endif
int
import_single_range
(
int
type
,
void
__user
*
buf
,
size_t
len
,
struct
iovec
*
iov
,
struct
iov_iter
*
i
);
#endif
lib/iov_iter.c
浏览文件 @
36e9f653
...
...
@@ -792,3 +792,60 @@ const void *dup_iter(struct iov_iter *new, struct iov_iter *old, gfp_t flags)
flags
);
}
EXPORT_SYMBOL
(
dup_iter
);
int
import_iovec
(
int
type
,
const
struct
iovec
__user
*
uvector
,
unsigned
nr_segs
,
unsigned
fast_segs
,
struct
iovec
**
iov
,
struct
iov_iter
*
i
)
{
ssize_t
n
;
struct
iovec
*
p
;
n
=
rw_copy_check_uvector
(
type
,
uvector
,
nr_segs
,
fast_segs
,
*
iov
,
&
p
);
if
(
n
<
0
)
{
if
(
p
!=
*
iov
)
kfree
(
p
);
*
iov
=
NULL
;
return
n
;
}
iov_iter_init
(
i
,
type
,
p
,
nr_segs
,
n
);
*
iov
=
p
==
*
iov
?
NULL
:
p
;
return
0
;
}
EXPORT_SYMBOL
(
import_iovec
);
#ifdef CONFIG_COMPAT
#include <linux/compat.h>
int
compat_import_iovec
(
int
type
,
const
struct
compat_iovec
__user
*
uvector
,
unsigned
nr_segs
,
unsigned
fast_segs
,
struct
iovec
**
iov
,
struct
iov_iter
*
i
)
{
ssize_t
n
;
struct
iovec
*
p
;
n
=
compat_rw_copy_check_uvector
(
type
,
uvector
,
nr_segs
,
fast_segs
,
*
iov
,
&
p
);
if
(
n
<
0
)
{
if
(
p
!=
*
iov
)
kfree
(
p
);
*
iov
=
NULL
;
return
n
;
}
iov_iter_init
(
i
,
type
,
p
,
nr_segs
,
n
);
*
iov
=
p
==
*
iov
?
NULL
:
p
;
return
0
;
}
#endif
int
import_single_range
(
int
rw
,
void
__user
*
buf
,
size_t
len
,
struct
iovec
*
iov
,
struct
iov_iter
*
i
)
{
if
(
len
>
MAX_RW_COUNT
)
len
=
MAX_RW_COUNT
;
if
(
unlikely
(
!
access_ok
(
!
rw
,
buf
,
len
)))
return
-
EFAULT
;
iov
->
iov_base
=
buf
;
iov
->
iov_len
=
len
;
iov_iter_init
(
i
,
rw
,
iov
,
1
,
len
);
return
0
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录