Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
13ba33e8
cloud-kernel
项目概览
openanolis
/
cloud-kernel
接近 2 年 前同步成功
通知
169
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看板
提交
13ba33e8
编写于
8月 18, 2014
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
switch /dev/zero and /dev/full to ->read_iter()
Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
a1f6dbac
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
13 addition
and
43 deletion
+13
-43
drivers/char/mem.c
drivers/char/mem.c
+13
-43
未找到文件。
drivers/char/mem.c
浏览文件 @
13ba33e8
...
@@ -622,53 +622,23 @@ static ssize_t splice_write_null(struct pipe_inode_info *pipe, struct file *out,
...
@@ -622,53 +622,23 @@ static ssize_t splice_write_null(struct pipe_inode_info *pipe, struct file *out,
return
splice_from_pipe
(
pipe
,
out
,
ppos
,
len
,
flags
,
pipe_to_null
);
return
splice_from_pipe
(
pipe
,
out
,
ppos
,
len
,
flags
,
pipe_to_null
);
}
}
static
ssize_t
read_zero
(
struct
file
*
file
,
char
__user
*
buf
,
static
ssize_t
read_iter_zero
(
struct
kiocb
*
iocb
,
struct
iov_iter
*
iter
)
size_t
count
,
loff_t
*
ppos
)
{
{
size_t
written
;
size_t
written
=
0
;
if
(
!
count
)
return
0
;
if
(
!
access_ok
(
VERIFY_WRITE
,
buf
,
count
))
return
-
EFAULT
;
written
=
0
;
while
(
count
)
{
unsigned
long
unwritten
;
size_t
chunk
=
count
;
while
(
iov_iter_count
(
iter
))
{
size_t
chunk
=
iov_iter_count
(
iter
),
n
;
if
(
chunk
>
PAGE_SIZE
)
if
(
chunk
>
PAGE_SIZE
)
chunk
=
PAGE_SIZE
;
/* Just for latency reasons */
chunk
=
PAGE_SIZE
;
/* Just for latency reasons */
unwritten
=
__clear_user
(
buf
,
chunk
);
n
=
iov_iter_zero
(
chunk
,
iter
);
written
+=
chunk
-
unwritten
;
if
(
!
n
&&
iov_iter_count
(
iter
))
if
(
unwritten
)
return
written
?
written
:
-
EFAULT
;
break
;
written
+=
n
;
if
(
signal_pending
(
current
))
if
(
signal_pending
(
current
))
return
written
?
written
:
-
ERESTARTSYS
;
return
written
?
written
:
-
ERESTARTSYS
;
buf
+=
chunk
;
count
-=
chunk
;
cond_resched
();
cond_resched
();
}
}
return
written
?
written
:
-
EFAULT
;
return
written
;
}
static
ssize_t
aio_read_zero
(
struct
kiocb
*
iocb
,
const
struct
iovec
*
iov
,
unsigned
long
nr_segs
,
loff_t
pos
)
{
size_t
written
=
0
;
unsigned
long
i
;
ssize_t
ret
;
for
(
i
=
0
;
i
<
nr_segs
;
i
++
)
{
ret
=
read_zero
(
iocb
->
ki_filp
,
iov
[
i
].
iov_base
,
iov
[
i
].
iov_len
,
&
pos
);
if
(
ret
<
0
)
break
;
written
+=
ret
;
}
return
written
?
written
:
-
EFAULT
;
}
}
static
int
mmap_zero
(
struct
file
*
file
,
struct
vm_area_struct
*
vma
)
static
int
mmap_zero
(
struct
file
*
file
,
struct
vm_area_struct
*
vma
)
...
@@ -738,7 +708,6 @@ static int open_port(struct inode *inode, struct file *filp)
...
@@ -738,7 +708,6 @@ static int open_port(struct inode *inode, struct file *filp)
#define zero_lseek null_lseek
#define zero_lseek null_lseek
#define full_lseek null_lseek
#define full_lseek null_lseek
#define write_zero write_null
#define write_zero write_null
#define read_full read_zero
#define aio_write_zero aio_write_null
#define aio_write_zero aio_write_null
#define open_mem open_port
#define open_mem open_port
#define open_kmem open_mem
#define open_kmem open_mem
...
@@ -783,9 +752,9 @@ static const struct file_operations port_fops = {
...
@@ -783,9 +752,9 @@ static const struct file_operations port_fops = {
static
const
struct
file_operations
zero_fops
=
{
static
const
struct
file_operations
zero_fops
=
{
.
llseek
=
zero_lseek
,
.
llseek
=
zero_lseek
,
.
read
=
read_zero
,
.
read
=
new_sync_read
,
.
write
=
write_zero
,
.
write
=
write_zero
,
.
aio_read
=
aio_read
_zero
,
.
read_iter
=
read_iter
_zero
,
.
aio_write
=
aio_write_zero
,
.
aio_write
=
aio_write_zero
,
.
mmap
=
mmap_zero
,
.
mmap
=
mmap_zero
,
};
};
...
@@ -802,7 +771,8 @@ static struct backing_dev_info zero_bdi = {
...
@@ -802,7 +771,8 @@ static struct backing_dev_info zero_bdi = {
static
const
struct
file_operations
full_fops
=
{
static
const
struct
file_operations
full_fops
=
{
.
llseek
=
full_lseek
,
.
llseek
=
full_lseek
,
.
read
=
read_full
,
.
read
=
new_sync_read
,
.
read_iter
=
read_iter_zero
,
.
write
=
write_full
,
.
write
=
write_full
,
};
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录