Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
dbae4c73
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 3 年多
通知
13
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
dbae4c73
编写于
4月 14, 2008
作者:
T
Trond Myklebust
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
NFS: Ensure that rpc_run_task() errors are propagated back to the caller
Signed-off-by:
N
Trond Myklebust
<
Trond.Myklebust@netapp.com
>
上级
c9d8f89d
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
40 addition
and
26 deletion
+40
-26
fs/nfs/direct.c
fs/nfs/direct.c
+6
-4
fs/nfs/read.c
fs/nfs/read.c
+15
-8
fs/nfs/write.c
fs/nfs/write.c
+19
-14
未找到文件。
fs/nfs/direct.c
浏览文件 @
dbae4c73
...
...
@@ -347,8 +347,9 @@ static ssize_t nfs_direct_read_schedule_segment(struct nfs_direct_req *dreq,
NFS_PROTO
(
inode
)
->
read_setup
(
data
,
&
msg
);
task
=
rpc_run_task
(
&
task_setup_data
);
if
(
!
IS_ERR
(
task
))
rpc_put_task
(
task
);
if
(
IS_ERR
(
task
))
break
;
rpc_put_task
(
task
);
dprintk
(
"NFS: %5u initiated direct read call "
"(req %s/%Ld, %zu bytes @ offset %Lu)
\n
"
,
...
...
@@ -763,8 +764,9 @@ static ssize_t nfs_direct_write_schedule_segment(struct nfs_direct_req *dreq,
NFS_PROTO
(
inode
)
->
write_setup
(
data
,
&
msg
);
task
=
rpc_run_task
(
&
task_setup_data
);
if
(
!
IS_ERR
(
task
))
rpc_put_task
(
task
);
if
(
IS_ERR
(
task
))
break
;
rpc_put_task
(
task
);
dprintk
(
"NFS: %5u initiated direct write call "
"(req %s/%Ld, %zu bytes @ offset %Lu)
\n
"
,
...
...
fs/nfs/read.c
浏览文件 @
dbae4c73
...
...
@@ -153,7 +153,7 @@ static void nfs_readpage_release(struct nfs_page *req)
/*
* Set up the NFS read request struct
*/
static
void
nfs_read_rpcsetup
(
struct
nfs_page
*
req
,
struct
nfs_read_data
*
data
,
static
int
nfs_read_rpcsetup
(
struct
nfs_page
*
req
,
struct
nfs_read_data
*
data
,
const
struct
rpc_call_ops
*
call_ops
,
unsigned
int
count
,
unsigned
int
offset
)
{
...
...
@@ -202,8 +202,10 @@ static void nfs_read_rpcsetup(struct nfs_page *req, struct nfs_read_data *data,
(
unsigned
long
long
)
data
->
args
.
offset
);
task
=
rpc_run_task
(
&
task_setup_data
);
if
(
!
IS_ERR
(
task
))
rpc_put_task
(
task
);
if
(
IS_ERR
(
task
))
return
PTR_ERR
(
task
);
rpc_put_task
(
task
);
return
0
;
}
static
void
...
...
@@ -240,6 +242,7 @@ static int nfs_pagein_multi(struct inode *inode, struct list_head *head, unsigne
size_t
rsize
=
NFS_SERVER
(
inode
)
->
rsize
,
nbytes
;
unsigned
int
offset
;
int
requests
=
0
;
int
ret
=
0
;
LIST_HEAD
(
list
);
nfs_list_remove_request
(
req
);
...
...
@@ -261,6 +264,8 @@ static int nfs_pagein_multi(struct inode *inode, struct list_head *head, unsigne
offset
=
0
;
nbytes
=
count
;
do
{
int
ret2
;
data
=
list_entry
(
list
.
next
,
struct
nfs_read_data
,
pages
);
list_del_init
(
&
data
->
pages
);
...
...
@@ -268,13 +273,15 @@ static int nfs_pagein_multi(struct inode *inode, struct list_head *head, unsigne
if
(
nbytes
<
rsize
)
rsize
=
nbytes
;
nfs_read_rpcsetup
(
req
,
data
,
&
nfs_read_partial_ops
,
ret2
=
nfs_read_rpcsetup
(
req
,
data
,
&
nfs_read_partial_ops
,
rsize
,
offset
);
if
(
ret
==
0
)
ret
=
ret2
;
offset
+=
rsize
;
nbytes
-=
rsize
;
}
while
(
nbytes
!=
0
);
return
0
;
return
ret
;
out_bad:
while
(
!
list_empty
(
&
list
))
{
...
...
@@ -292,6 +299,7 @@ static int nfs_pagein_one(struct inode *inode, struct list_head *head, unsigned
struct
nfs_page
*
req
;
struct
page
**
pages
;
struct
nfs_read_data
*
data
;
int
ret
=
-
ENOMEM
;
data
=
nfs_readdata_alloc
(
npages
);
if
(
!
data
)
...
...
@@ -307,11 +315,10 @@ static int nfs_pagein_one(struct inode *inode, struct list_head *head, unsigned
}
req
=
nfs_list_entry
(
data
->
pages
.
next
);
nfs_read_rpcsetup
(
req
,
data
,
&
nfs_read_full_ops
,
count
,
0
);
return
0
;
return
nfs_read_rpcsetup
(
req
,
data
,
&
nfs_read_full_ops
,
count
,
0
);
out_bad:
nfs_async_read_error
(
head
);
return
-
ENOMEM
;
return
ret
;
}
/*
...
...
fs/nfs/write.c
浏览文件 @
dbae4c73
...
...
@@ -778,7 +778,7 @@ static int flush_task_priority(int how)
/*
* Set up the argument/result storage required for the RPC call.
*/
static
void
nfs_write_rpcsetup
(
struct
nfs_page
*
req
,
static
int
nfs_write_rpcsetup
(
struct
nfs_page
*
req
,
struct
nfs_write_data
*
data
,
const
struct
rpc_call_ops
*
call_ops
,
unsigned
int
count
,
unsigned
int
offset
,
...
...
@@ -841,8 +841,10 @@ static void nfs_write_rpcsetup(struct nfs_page *req,
(
unsigned
long
long
)
data
->
args
.
offset
);
task
=
rpc_run_task
(
&
task_setup_data
);
if
(
!
IS_ERR
(
task
))
rpc_put_task
(
task
);
if
(
IS_ERR
(
task
))
return
PTR_ERR
(
task
);
rpc_put_task
(
task
);
return
0
;
}
/* If a nfs_flush_* function fails, it should remove reqs from @head and
...
...
@@ -868,6 +870,7 @@ static int nfs_flush_multi(struct inode *inode, struct list_head *head, unsigned
size_t
wsize
=
NFS_SERVER
(
inode
)
->
wsize
,
nbytes
;
unsigned
int
offset
;
int
requests
=
0
;
int
ret
=
0
;
LIST_HEAD
(
list
);
nfs_list_remove_request
(
req
);
...
...
@@ -889,6 +892,8 @@ static int nfs_flush_multi(struct inode *inode, struct list_head *head, unsigned
offset
=
0
;
nbytes
=
count
;
do
{
int
ret2
;
data
=
list_entry
(
list
.
next
,
struct
nfs_write_data
,
pages
);
list_del_init
(
&
data
->
pages
);
...
...
@@ -896,13 +901,15 @@ static int nfs_flush_multi(struct inode *inode, struct list_head *head, unsigned
if
(
nbytes
<
wsize
)
wsize
=
nbytes
;
nfs_write_rpcsetup
(
req
,
data
,
&
nfs_write_partial_ops
,
ret2
=
nfs_write_rpcsetup
(
req
,
data
,
&
nfs_write_partial_ops
,
wsize
,
offset
,
how
);
if
(
ret
==
0
)
ret
=
ret2
;
offset
+=
wsize
;
nbytes
-=
wsize
;
}
while
(
nbytes
!=
0
);
return
0
;
return
ret
;
out_bad:
while
(
!
list_empty
(
&
list
))
{
...
...
@@ -943,9 +950,7 @@ static int nfs_flush_one(struct inode *inode, struct list_head *head, unsigned i
req
=
nfs_list_entry
(
data
->
pages
.
next
);
/* Set up the argument struct */
nfs_write_rpcsetup
(
req
,
data
,
&
nfs_write_full_ops
,
count
,
0
,
how
);
return
0
;
return
nfs_write_rpcsetup
(
req
,
data
,
&
nfs_write_full_ops
,
count
,
0
,
how
);
out_bad:
while
(
!
list_empty
(
head
))
{
req
=
nfs_list_entry
(
head
->
next
);
...
...
@@ -1183,7 +1188,7 @@ void nfs_commitdata_release(void *data)
/*
* Set up the argument/result storage required for the RPC call.
*/
static
void
nfs_commit_rpcsetup
(
struct
list_head
*
head
,
static
int
nfs_commit_rpcsetup
(
struct
list_head
*
head
,
struct
nfs_write_data
*
data
,
int
how
)
{
...
...
@@ -1232,8 +1237,10 @@ static void nfs_commit_rpcsetup(struct list_head *head,
dprintk
(
"NFS: %5u initiated commit call
\n
"
,
data
->
task
.
tk_pid
);
task
=
rpc_run_task
(
&
task_setup_data
);
if
(
!
IS_ERR
(
task
))
rpc_put_task
(
task
);
if
(
IS_ERR
(
task
))
return
PTR_ERR
(
task
);
rpc_put_task
(
task
);
return
0
;
}
/*
...
...
@@ -1251,9 +1258,7 @@ nfs_commit_list(struct inode *inode, struct list_head *head, int how)
goto
out_bad
;
/* Set up the argument struct */
nfs_commit_rpcsetup
(
head
,
data
,
how
);
return
0
;
return
nfs_commit_rpcsetup
(
head
,
data
,
how
);
out_bad:
while
(
!
list_empty
(
head
))
{
req
=
nfs_list_entry
(
head
->
next
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录