Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
FengXiao2002
Linux Imx
提交
16e42959
L
Linux Imx
项目概览
FengXiao2002
/
Linux Imx
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
Linux Imx
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
16e42959
编写于
10月 27, 2005
作者:
T
Trond Myklebust
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
NFSv4: Add post-op attributes to nfs4_proc_remove()
Signed-off-by:
N
Trond Myklebust
<
Trond.Myklebust@netapp.com
>
上级
6caf2c82
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
45 addition
and
14 deletion
+45
-14
fs/nfs/nfs4proc.c
fs/nfs/nfs4proc.c
+21
-6
fs/nfs/nfs4xdr.c
fs/nfs/nfs4xdr.c
+17
-8
include/linux/nfs_xdr.h
include/linux/nfs_xdr.h
+7
-0
未找到文件。
fs/nfs/nfs4proc.c
浏览文件 @
16e42959
...
...
@@ -1614,11 +1614,17 @@ out:
static
int
_nfs4_proc_remove
(
struct
inode
*
dir
,
struct
qstr
*
name
)
{
struct
nfs_server
*
server
=
NFS_SERVER
(
dir
);
struct
nfs4_remove_arg
args
=
{
.
fh
=
NFS_FH
(
dir
),
.
name
=
name
,
.
bitmask
=
server
->
attr_bitmask
,
};
struct
nfs_fattr
dir_attr
;
struct
nfs4_remove_res
res
=
{
.
server
=
server
,
.
dir_attr
=
&
dir_attr
,
};
struct
nfs4_change_info
res
;
struct
rpc_message
msg
=
{
.
rpc_proc
=
&
nfs4_procedures
[
NFSPROC4_CLNT_REMOVE
],
.
rpc_argp
=
&
args
,
...
...
@@ -1626,9 +1632,12 @@ static int _nfs4_proc_remove(struct inode *dir, struct qstr *name)
};
int
status
;
status
=
rpc_call_sync
(
NFS_CLIENT
(
dir
),
&
msg
,
0
);
if
(
status
==
0
)
update_changeattr
(
dir
,
&
res
);
nfs_fattr_init
(
res
.
dir_attr
);
status
=
rpc_call_sync
(
server
->
client
,
&
msg
,
0
);
if
(
status
==
0
)
{
update_changeattr
(
dir
,
&
res
.
cinfo
);
nfs_post_op_update_inode
(
dir
,
res
.
dir_attr
);
}
return
status
;
}
...
...
@@ -1646,12 +1655,14 @@ static int nfs4_proc_remove(struct inode *dir, struct qstr *name)
struct
unlink_desc
{
struct
nfs4_remove_arg
args
;
struct
nfs4_change_info
res
;
struct
nfs4_remove_res
res
;
struct
nfs_fattr
dir_attr
;
};
static
int
nfs4_proc_unlink_setup
(
struct
rpc_message
*
msg
,
struct
dentry
*
dir
,
struct
qstr
*
name
)
{
struct
nfs_server
*
server
=
NFS_SERVER
(
dir
->
d_inode
);
struct
unlink_desc
*
up
;
up
=
(
struct
unlink_desc
*
)
kmalloc
(
sizeof
(
*
up
),
GFP_KERNEL
);
...
...
@@ -1660,6 +1671,9 @@ static int nfs4_proc_unlink_setup(struct rpc_message *msg, struct dentry *dir,
up
->
args
.
fh
=
NFS_FH
(
dir
->
d_inode
);
up
->
args
.
name
=
name
;
up
->
args
.
bitmask
=
server
->
attr_bitmask
;
up
->
res
.
server
=
server
;
up
->
res
.
dir_attr
=
&
up
->
dir_attr
;
msg
->
rpc_proc
=
&
nfs4_procedures
[
NFSPROC4_CLNT_REMOVE
];
msg
->
rpc_argp
=
&
up
->
args
;
...
...
@@ -1674,7 +1688,8 @@ static int nfs4_proc_unlink_done(struct dentry *dir, struct rpc_task *task)
if
(
msg
->
rpc_resp
!=
NULL
)
{
up
=
container_of
(
msg
->
rpc_resp
,
struct
unlink_desc
,
res
);
update_changeattr
(
dir
->
d_inode
,
&
up
->
res
);
update_changeattr
(
dir
->
d_inode
,
&
up
->
res
.
cinfo
);
nfs_post_op_update_inode
(
dir
->
d_inode
,
up
->
res
.
dir_attr
);
kfree
(
up
);
msg
->
rpc_resp
=
NULL
;
msg
->
rpc_argp
=
NULL
;
...
...
fs/nfs/nfs4xdr.c
浏览文件 @
16e42959
...
...
@@ -306,10 +306,12 @@ static int nfs_stat_to_errno(int);
decode_getfh_maxsz)
#define NFS4_enc_remove_sz (compound_encode_hdr_maxsz + \
encode_putfh_maxsz + \
encode_remove_maxsz)
encode_remove_maxsz + \
encode_getattr_maxsz)
#define NFS4_dec_remove_sz (compound_decode_hdr_maxsz + \
decode_putfh_maxsz + \
op_decode_hdr_maxsz + 5)
op_decode_hdr_maxsz + 5 + \
decode_getattr_maxsz)
#define NFS4_enc_rename_sz (compound_encode_hdr_maxsz + \
encode_putfh_maxsz + \
encode_savefh_maxsz + \
...
...
@@ -1327,14 +1329,18 @@ static int nfs4_xdr_enc_remove(struct rpc_rqst *req, uint32_t *p, const struct n
{
struct
xdr_stream
xdr
;
struct
compound_hdr
hdr
=
{
.
nops
=
2
,
.
nops
=
3
,
};
int
status
;
xdr_init_encode
(
&
xdr
,
&
req
->
rq_snd_buf
,
p
);
encode_compound_hdr
(
&
xdr
,
&
hdr
);
if
((
status
=
encode_putfh
(
&
xdr
,
args
->
fh
))
==
0
)
status
=
encode_remove
(
&
xdr
,
args
->
name
);
if
((
status
=
encode_putfh
(
&
xdr
,
args
->
fh
))
!=
0
)
goto
out
;
if
((
status
=
encode_remove
(
&
xdr
,
args
->
name
))
!=
0
)
goto
out
;
status
=
encode_getfattr
(
&
xdr
,
args
->
bitmask
);
out:
return
status
;
}
...
...
@@ -3512,7 +3518,7 @@ out:
/*
* Decode REMOVE response
*/
static
int
nfs4_xdr_dec_remove
(
struct
rpc_rqst
*
rqstp
,
uint32_t
*
p
,
struct
nfs4_
change_info
*
cinfo
)
static
int
nfs4_xdr_dec_remove
(
struct
rpc_rqst
*
rqstp
,
uint32_t
*
p
,
struct
nfs4_
remove_res
*
res
)
{
struct
xdr_stream
xdr
;
struct
compound_hdr
hdr
;
...
...
@@ -3521,8 +3527,11 @@ static int nfs4_xdr_dec_remove(struct rpc_rqst *rqstp, uint32_t *p, struct nfs4_
xdr_init_decode
(
&
xdr
,
&
rqstp
->
rq_rcv_buf
,
p
);
if
((
status
=
decode_compound_hdr
(
&
xdr
,
&
hdr
))
!=
0
)
goto
out
;
if
((
status
=
decode_putfh
(
&
xdr
))
==
0
)
status
=
decode_remove
(
&
xdr
,
cinfo
);
if
((
status
=
decode_putfh
(
&
xdr
))
!=
0
)
goto
out
;
if
((
status
=
decode_remove
(
&
xdr
,
&
res
->
cinfo
))
!=
0
)
goto
out
;
decode_getfattr
(
&
xdr
,
res
->
dir_attr
,
res
->
server
);
out:
return
status
;
}
...
...
include/linux/nfs_xdr.h
浏览文件 @
16e42959
...
...
@@ -623,6 +623,13 @@ struct nfs4_readlink {
struct
nfs4_remove_arg
{
const
struct
nfs_fh
*
fh
;
const
struct
qstr
*
name
;
const
u32
*
bitmask
;
};
struct
nfs4_remove_res
{
const
struct
nfs_server
*
server
;
struct
nfs4_change_info
cinfo
;
struct
nfs_fattr
*
dir_attr
;
};
struct
nfs4_rename_arg
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录