Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiphi1978
linux
提交
535918f1
L
linux
项目概览
xiphi1978
/
linux
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
535918f1
编写于
9月 17, 2010
作者:
T
Trond Myklebust
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
NFSv4: Further cleanups for nfs4_open_revalidate()
Signed-off-by:
N
Trond Myklebust
<
Trond.Myklebust@netapp.com
>
上级
b8d4cadd
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
26 addition
and
35 deletion
+26
-35
fs/nfs/dir.c
fs/nfs/dir.c
+26
-6
fs/nfs/nfs4_fs.h
fs/nfs/nfs4_fs.h
+0
-1
fs/nfs/nfs4proc.c
fs/nfs/nfs4proc.c
+0
-28
未找到文件。
fs/nfs/dir.c
浏览文件 @
535918f1
...
...
@@ -1204,16 +1204,36 @@ static int nfs_open_revalidate(struct dentry *dentry, struct nameidata *nd)
* operations that change the directory. We therefore save the
* change attribute *before* we do the RPC call.
*/
ret
=
nfs4_open_revalidate
(
dir
,
ctx
,
openflags
);
if
(
ret
==
1
)
inode
=
nfs4_atomic_open
(
dir
,
ctx
,
openflags
,
NULL
);
if
(
IS_ERR
(
inode
))
{
ret
=
PTR_ERR
(
inode
);
switch
(
ret
)
{
case
-
EPERM
:
case
-
EACCES
:
case
-
EDQUOT
:
case
-
ENOSPC
:
case
-
EROFS
:
goto
out_put_ctx
;
default:
goto
out_drop
;
}
}
iput
(
inode
);
if
(
inode
==
dentry
->
d_inode
)
{
nfs_set_verifier
(
dentry
,
nfs_save_change_attribute
(
dir
));
nfs_intent_set_file
(
nd
,
ctx
);
else
put_nfs_open_context
(
ctx
)
;
}
else
goto
out_drop
;
out:
dput
(
parent
);
if
(
!
ret
)
d_drop
(
dentry
);
return
ret
;
out_drop:
d_drop
(
dentry
);
ret
=
0
;
out_put_ctx:
put_nfs_open_context
(
ctx
);
goto
out
;
no_open_dput:
dput
(
parent
);
no_open:
...
...
fs/nfs/nfs4_fs.h
浏览文件 @
535918f1
...
...
@@ -243,7 +243,6 @@ extern int nfs4_init_clientid(struct nfs_client *, struct rpc_cred *);
extern
int
nfs41_init_clientid
(
struct
nfs_client
*
,
struct
rpc_cred
*
);
extern
int
nfs4_do_close
(
struct
path
*
path
,
struct
nfs4_state
*
state
,
gfp_t
gfp_mask
,
int
wait
);
extern
struct
inode
*
nfs4_atomic_open
(
struct
inode
*
,
struct
nfs_open_context
*
,
int
,
struct
iattr
*
);
extern
int
nfs4_open_revalidate
(
struct
inode
*
,
struct
nfs_open_context
*
,
int
);
extern
int
nfs4_server_capabilities
(
struct
nfs_server
*
server
,
struct
nfs_fh
*
fhandle
);
extern
int
nfs4_proc_fs_locations
(
struct
inode
*
dir
,
const
struct
qstr
*
name
,
struct
nfs4_fs_locations
*
fs_locations
,
struct
page
*
page
);
...
...
fs/nfs/nfs4proc.c
浏览文件 @
535918f1
...
...
@@ -2037,34 +2037,6 @@ nfs4_atomic_open(struct inode *dir, struct nfs_open_context *ctx, int open_flags
return
igrab
(
state
->
inode
);
}
int
nfs4_open_revalidate
(
struct
inode
*
dir
,
struct
nfs_open_context
*
ctx
,
int
openflags
)
{
struct
nfs4_state
*
state
;
state
=
nfs4_do_open
(
dir
,
&
ctx
->
path
,
ctx
->
mode
,
openflags
,
NULL
,
ctx
->
cred
);
if
(
IS_ERR
(
state
))
{
switch
(
PTR_ERR
(
state
))
{
case
-
EPERM
:
case
-
EACCES
:
case
-
EDQUOT
:
case
-
ENOSPC
:
case
-
EROFS
:
return
PTR_ERR
(
state
);
default:
goto
out_drop
;
}
}
ctx
->
state
=
state
;
if
(
state
->
inode
==
ctx
->
path
.
dentry
->
d_inode
)
{
nfs_set_verifier
(
ctx
->
path
.
dentry
,
nfs_save_change_attribute
(
dir
));
return
1
;
}
out_drop:
d_drop
(
ctx
->
path
.
dentry
);
return
0
;
}
static
void
nfs4_close_context
(
struct
nfs_open_context
*
ctx
,
int
is_sync
)
{
if
(
ctx
->
state
==
NULL
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录