Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci-2.6.23
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci-2.6.23
Commits
6caf2c82
Commit
6caf2c82
authored
Oct 27, 2005
by
Trond Myklebust
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
NFSv4: Add post-op attributes to nfs4_proc_rename()
Signed-off-by:
Trond Myklebust
<
Trond.Myklebust@netapp.com
>
parent
91ba2eee
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
41 additions
and
7 deletions
+41
-7
fs/nfs/nfs4proc.c
fs/nfs/nfs4proc.c
+13
-2
fs/nfs/nfs4xdr.c
fs/nfs/nfs4xdr.c
+24
-5
include/linux/nfs_xdr.h
include/linux/nfs_xdr.h
+4
-0
No files found.
fs/nfs/nfs4proc.c
View file @
6caf2c82
...
@@ -1685,13 +1685,20 @@ static int nfs4_proc_unlink_done(struct dentry *dir, struct rpc_task *task)
...
@@ -1685,13 +1685,20 @@ static int nfs4_proc_unlink_done(struct dentry *dir, struct rpc_task *task)
static
int
_nfs4_proc_rename
(
struct
inode
*
old_dir
,
struct
qstr
*
old_name
,
static
int
_nfs4_proc_rename
(
struct
inode
*
old_dir
,
struct
qstr
*
old_name
,
struct
inode
*
new_dir
,
struct
qstr
*
new_name
)
struct
inode
*
new_dir
,
struct
qstr
*
new_name
)
{
{
struct
nfs_server
*
server
=
NFS_SERVER
(
old_dir
);
struct
nfs4_rename_arg
arg
=
{
struct
nfs4_rename_arg
arg
=
{
.
old_dir
=
NFS_FH
(
old_dir
),
.
old_dir
=
NFS_FH
(
old_dir
),
.
new_dir
=
NFS_FH
(
new_dir
),
.
new_dir
=
NFS_FH
(
new_dir
),
.
old_name
=
old_name
,
.
old_name
=
old_name
,
.
new_name
=
new_name
,
.
new_name
=
new_name
,
.
bitmask
=
server
->
attr_bitmask
,
};
struct
nfs_fattr
old_fattr
,
new_fattr
;
struct
nfs4_rename_res
res
=
{
.
server
=
server
,
.
old_fattr
=
&
old_fattr
,
.
new_fattr
=
&
new_fattr
,
};
};
struct
nfs4_rename_res
res
=
{
};
struct
rpc_message
msg
=
{
struct
rpc_message
msg
=
{
.
rpc_proc
=
&
nfs4_procedures
[
NFSPROC4_CLNT_RENAME
],
.
rpc_proc
=
&
nfs4_procedures
[
NFSPROC4_CLNT_RENAME
],
.
rpc_argp
=
&
arg
,
.
rpc_argp
=
&
arg
,
...
@@ -1699,11 +1706,15 @@ static int _nfs4_proc_rename(struct inode *old_dir, struct qstr *old_name,
...
@@ -1699,11 +1706,15 @@ static int _nfs4_proc_rename(struct inode *old_dir, struct qstr *old_name,
};
};
int
status
;
int
status
;
status
=
rpc_call_sync
(
NFS_CLIENT
(
old_dir
),
&
msg
,
0
);
nfs_fattr_init
(
res
.
old_fattr
);
nfs_fattr_init
(
res
.
new_fattr
);
status
=
rpc_call_sync
(
server
->
client
,
&
msg
,
0
);
if
(
!
status
)
{
if
(
!
status
)
{
update_changeattr
(
old_dir
,
&
res
.
old_cinfo
);
update_changeattr
(
old_dir
,
&
res
.
old_cinfo
);
nfs_post_op_update_inode
(
old_dir
,
res
.
old_fattr
);
update_changeattr
(
new_dir
,
&
res
.
new_cinfo
);
update_changeattr
(
new_dir
,
&
res
.
new_cinfo
);
nfs_post_op_update_inode
(
new_dir
,
res
.
new_fattr
);
}
}
return
status
;
return
status
;
}
}
...
...
fs/nfs/nfs4xdr.c
View file @
6caf2c82
...
@@ -314,12 +314,18 @@ static int nfs_stat_to_errno(int);
...
@@ -314,12 +314,18 @@ static int nfs_stat_to_errno(int);
encode_putfh_maxsz + \
encode_putfh_maxsz + \
encode_savefh_maxsz + \
encode_savefh_maxsz + \
encode_putfh_maxsz + \
encode_putfh_maxsz + \
encode_rename_maxsz)
encode_rename_maxsz + \
encode_getattr_maxsz + \
encode_restorefh_maxsz + \
encode_getattr_maxsz)
#define NFS4_dec_rename_sz (compound_decode_hdr_maxsz + \
#define NFS4_dec_rename_sz (compound_decode_hdr_maxsz + \
decode_putfh_maxsz + \
decode_putfh_maxsz + \
decode_savefh_maxsz + \
decode_savefh_maxsz + \
decode_putfh_maxsz + \
decode_putfh_maxsz + \
decode_rename_maxsz)
decode_rename_maxsz + \
decode_getattr_maxsz + \
decode_restorefh_maxsz + \
decode_getattr_maxsz)
#define NFS4_enc_link_sz (compound_encode_hdr_maxsz + \
#define NFS4_enc_link_sz (compound_encode_hdr_maxsz + \
encode_putfh_maxsz + \
encode_putfh_maxsz + \
encode_savefh_maxsz + \
encode_savefh_maxsz + \
...
@@ -1339,7 +1345,7 @@ static int nfs4_xdr_enc_rename(struct rpc_rqst *req, uint32_t *p, const struct n
...
@@ -1339,7 +1345,7 @@ static int nfs4_xdr_enc_rename(struct rpc_rqst *req, uint32_t *p, const struct n
{
{
struct
xdr_stream
xdr
;
struct
xdr_stream
xdr
;
struct
compound_hdr
hdr
=
{
struct
compound_hdr
hdr
=
{
.
nops
=
4
,
.
nops
=
7
,
};
};
int
status
;
int
status
;
...
@@ -1351,7 +1357,13 @@ static int nfs4_xdr_enc_rename(struct rpc_rqst *req, uint32_t *p, const struct n
...
@@ -1351,7 +1357,13 @@ static int nfs4_xdr_enc_rename(struct rpc_rqst *req, uint32_t *p, const struct n
goto
out
;
goto
out
;
if
((
status
=
encode_putfh
(
&
xdr
,
args
->
new_dir
))
!=
0
)
if
((
status
=
encode_putfh
(
&
xdr
,
args
->
new_dir
))
!=
0
)
goto
out
;
goto
out
;
status
=
encode_rename
(
&
xdr
,
args
->
old_name
,
args
->
new_name
);
if
((
status
=
encode_rename
(
&
xdr
,
args
->
old_name
,
args
->
new_name
))
!=
0
)
goto
out
;
if
((
status
=
encode_getfattr
(
&
xdr
,
args
->
bitmask
))
!=
0
)
goto
out
;
if
((
status
=
encode_restorefh
(
&
xdr
))
!=
0
)
goto
out
;
status
=
encode_getfattr
(
&
xdr
,
args
->
bitmask
);
out:
out:
return
status
;
return
status
;
}
}
...
@@ -3533,7 +3545,14 @@ static int nfs4_xdr_dec_rename(struct rpc_rqst *rqstp, uint32_t *p, struct nfs4_
...
@@ -3533,7 +3545,14 @@ static int nfs4_xdr_dec_rename(struct rpc_rqst *rqstp, uint32_t *p, struct nfs4_
goto
out
;
goto
out
;
if
((
status
=
decode_putfh
(
&
xdr
))
!=
0
)
if
((
status
=
decode_putfh
(
&
xdr
))
!=
0
)
goto
out
;
goto
out
;
status
=
decode_rename
(
&
xdr
,
&
res
->
old_cinfo
,
&
res
->
new_cinfo
);
if
((
status
=
decode_rename
(
&
xdr
,
&
res
->
old_cinfo
,
&
res
->
new_cinfo
))
!=
0
)
goto
out
;
/* Current FH is target directory */
if
(
decode_getfattr
(
&
xdr
,
res
->
new_fattr
,
res
->
server
)
!=
0
)
goto
out
;
if
((
status
=
decode_restorefh
(
&
xdr
))
!=
0
)
goto
out
;
decode_getfattr
(
&
xdr
,
res
->
old_fattr
,
res
->
server
);
out:
out:
return
status
;
return
status
;
}
}
...
...
include/linux/nfs_xdr.h
View file @
6caf2c82
...
@@ -630,11 +630,15 @@ struct nfs4_rename_arg {
...
@@ -630,11 +630,15 @@ struct nfs4_rename_arg {
const
struct
nfs_fh
*
new_dir
;
const
struct
nfs_fh
*
new_dir
;
const
struct
qstr
*
old_name
;
const
struct
qstr
*
old_name
;
const
struct
qstr
*
new_name
;
const
struct
qstr
*
new_name
;
const
u32
*
bitmask
;
};
};
struct
nfs4_rename_res
{
struct
nfs4_rename_res
{
const
struct
nfs_server
*
server
;
struct
nfs4_change_info
old_cinfo
;
struct
nfs4_change_info
old_cinfo
;
struct
nfs_fattr
*
old_fattr
;
struct
nfs4_change_info
new_cinfo
;
struct
nfs4_change_info
new_cinfo
;
struct
nfs_fattr
*
new_fattr
;
};
};
struct
nfs4_setclientid
{
struct
nfs4_setclientid
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment