Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
d82718e3
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
d82718e3
编写于
9月 17, 2016
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fuse_dev_splice_read(): switch to add_to_pipe()
Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
25869262
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
9 addition
and
37 deletion
+9
-37
fs/fuse/dev.c
fs/fuse/dev.c
+9
-37
未找到文件。
fs/fuse/dev.c
浏览文件 @
d82718e3
...
...
@@ -1342,9 +1342,8 @@ static ssize_t fuse_dev_splice_read(struct file *in, loff_t *ppos,
struct
pipe_inode_info
*
pipe
,
size_t
len
,
unsigned
int
flags
)
{
int
ret
;
int
total
,
ret
;
int
page_nr
=
0
;
int
do_wakeup
=
0
;
struct
pipe_buffer
*
bufs
;
struct
fuse_copy_state
cs
;
struct
fuse_dev
*
fud
=
fuse_get_dev
(
in
);
...
...
@@ -1363,50 +1362,23 @@ static ssize_t fuse_dev_splice_read(struct file *in, loff_t *ppos,
if
(
ret
<
0
)
goto
out
;
ret
=
0
;
if
(
!
pipe
->
readers
)
{
send_sig
(
SIGPIPE
,
current
,
0
);
if
(
!
ret
)
ret
=
-
EPIPE
;
goto
out_unlock
;
}
if
(
pipe
->
nrbufs
+
cs
.
nr_segs
>
pipe
->
buffers
)
{
ret
=
-
EIO
;
goto
out
_unlock
;
goto
out
;
}
while
(
page_nr
<
cs
.
nr_segs
)
{
int
newbuf
=
(
pipe
->
curbuf
+
pipe
->
nrbufs
)
&
(
pipe
->
buffers
-
1
);
struct
pipe_buffer
*
buf
=
pipe
->
bufs
+
newbuf
;
buf
->
page
=
bufs
[
page_nr
].
page
;
buf
->
offset
=
bufs
[
page_nr
].
offset
;
buf
->
len
=
bufs
[
page_nr
].
len
;
for
(
ret
=
total
=
0
;
page_nr
<
cs
.
nr_segs
;
total
+=
ret
)
{
/*
* Need to be careful about this. Having buf->ops in module
* code can Oops if the buffer persists after module unload.
*/
buf
->
ops
=
&
nosteal_pipe_buf_ops
;
pipe
->
nrbufs
++
;
page_nr
++
;
ret
+=
buf
->
len
;
if
(
pipe
->
files
)
do_wakeup
=
1
;
}
out_unlock:
if
(
do_wakeup
)
{
smp_mb
();
if
(
waitqueue_active
(
&
pipe
->
wait
))
wake_up_interruptible
(
&
pipe
->
wait
);
kill_fasync
(
&
pipe
->
fasync_readers
,
SIGIO
,
POLL_IN
);
bufs
[
page_nr
].
ops
=
&
nosteal_pipe_buf_ops
;
ret
=
add_to_pipe
(
pipe
,
&
bufs
[
page_nr
++
]);
if
(
unlikely
(
ret
<
0
))
break
;
}
if
(
total
)
ret
=
total
;
out:
for
(;
page_nr
<
cs
.
nr_segs
;
page_nr
++
)
put_page
(
bufs
[
page_nr
].
page
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录