Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
2f753f67
Commit
2f753f67
authored
Jan 14, 2003
by
Christoph Hellwig
Committed by
Christoph Hellwig
Jan 14, 2003
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[XFS] some more rename cleanups
SGI Modid: 2.5.x-xfs:slinx:
135919a3
parent
9ba118f5
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
15 additions
and
34 deletions
+15
-34
fs/xfs/xfs_rename.c
fs/xfs/xfs_rename.c
+15
-34
No files found.
fs/xfs/xfs_rename.c
View file @
2f753f67
...
@@ -72,14 +72,13 @@ int xfs_rename_skip, xfs_rename_nskip;
...
@@ -72,14 +72,13 @@ int xfs_rename_skip, xfs_rename_nskip;
* We are renaming dp1/name1 to dp2/name2.
* We are renaming dp1/name1 to dp2/name2.
*
*
* Return ENOENT if dp1 does not exist, other lookup errors, or 0 for success.
* Return ENOENT if dp1 does not exist, other lookup errors, or 0 for success.
* Return EAGAIN if the caller needs to try again.
*/
*/
STATIC
int
STATIC
int
xfs_lock_for_rename
(
xfs_lock_for_rename
(
xfs_inode_t
*
dp1
,
/* old (source) directory inode */
xfs_inode_t
*
dp1
,
/* old (source) directory inode */
xfs_inode_t
*
dp2
,
/* new (target) directory inode */
xfs_inode_t
*
dp2
,
/* new (target) directory inode */
vname_t
*
dentry1
,
/* old entry name */
vname_t
*
vname1
,
/* old entry name */
vname_t
*
dentry2
,
/* new entry name */
vname_t
*
vname2
,
/* new entry name */
xfs_inode_t
**
ipp1
,
/* inode of old entry */
xfs_inode_t
**
ipp1
,
/* inode of old entry */
xfs_inode_t
**
ipp2
,
/* inode of new entry, if it
xfs_inode_t
**
ipp2
,
/* inode of new entry, if it
already exists, NULL otherwise. */
already exists, NULL otherwise. */
...
@@ -102,7 +101,7 @@ xfs_lock_for_rename(
...
@@ -102,7 +101,7 @@ xfs_lock_for_rename(
* to see if we still have the right inodes, directories, etc.
* to see if we still have the right inodes, directories, etc.
*/
*/
lock_mode
=
xfs_ilock_map_shared
(
dp1
);
lock_mode
=
xfs_ilock_map_shared
(
dp1
);
error
=
xfs_get_dir_entry
(
dentry
1
,
&
ip1
);
error
=
xfs_get_dir_entry
(
vname
1
,
&
ip1
);
if
(
error
)
{
if
(
error
)
{
xfs_iunlock_map_shared
(
dp1
,
lock_mode
);
xfs_iunlock_map_shared
(
dp1
,
lock_mode
);
return
error
;
return
error
;
...
@@ -123,7 +122,7 @@ xfs_lock_for_rename(
...
@@ -123,7 +122,7 @@ xfs_lock_for_rename(
}
}
error
=
xfs_dir_lookup_int
(
XFS_ITOBHV
(
dp2
),
lock_mode
,
error
=
xfs_dir_lookup_int
(
XFS_ITOBHV
(
dp2
),
lock_mode
,
dentry
2
,
&
inum2
,
&
ip2
);
vname
2
,
&
inum2
,
&
ip2
);
if
(
error
==
ENOENT
)
{
/* target does not need to exist. */
if
(
error
==
ENOENT
)
{
/* target does not need to exist. */
inum2
=
0
;
inum2
=
0
;
}
else
if
(
error
)
{
}
else
if
(
error
)
{
...
@@ -213,20 +212,15 @@ xfs_lock_for_rename(
...
@@ -213,20 +212,15 @@ xfs_lock_for_rename(
int
rename_which_error_return
=
0
;
int
rename_which_error_return
=
0
;
#ifdef DEBUG
int
xfs_rename_agains
;
int
xfs_renames
;
#endif
/*
/*
* xfs_rename
* xfs_rename
*/
*/
int
int
xfs_rename
(
xfs_rename
(
bhv_desc_t
*
src_dir_bdp
,
bhv_desc_t
*
src_dir_bdp
,
vname_t
*
src_
dentry
,
vname_t
*
src_
vname
,
vnode_t
*
target_dir_vp
,
vnode_t
*
target_dir_vp
,
vname_t
*
target_
dentry
,
vname_t
*
target_
vname
,
cred_t
*
credp
)
cred_t
*
credp
)
{
{
xfs_trans_t
*
tp
;
xfs_trans_t
*
tp
;
...
@@ -246,15 +240,11 @@ xfs_rename(
...
@@ -246,15 +240,11 @@ xfs_rename(
int
spaceres
;
int
spaceres
;
int
target_link_zero
=
0
;
int
target_link_zero
=
0
;
int
num_inodes
;
int
num_inodes
;
char
*
src_name
=
VNAME
(
src_dentry
);
char
*
src_name
=
VNAME
(
src_vname
);
char
*
target_name
=
VNAME
(
target_dentry
);
char
*
target_name
=
VNAME
(
target_vname
);
int
src_namelen
;
int
src_namelen
=
VNAMELEN
(
src_vname
);
int
target_namelen
;
int
target_namelen
=
VNAMELEN
(
target_vname
);
#ifdef DEBUG
int
retries
;
xfs_renames
++
;
#endif
src_dir_vp
=
BHV_TO_VNODE
(
src_dir_bdp
);
src_dir_vp
=
BHV_TO_VNODE
(
src_dir_bdp
);
vn_trace_entry
(
src_dir_vp
,
"xfs_rename"
,
(
inst_t
*
)
__return_address
);
vn_trace_entry
(
src_dir_vp
,
"xfs_rename"
,
(
inst_t
*
)
__return_address
);
vn_trace_entry
(
target_dir_vp
,
"xfs_rename"
,
(
inst_t
*
)
__return_address
);
vn_trace_entry
(
target_dir_vp
,
"xfs_rename"
,
(
inst_t
*
)
__return_address
);
...
@@ -268,10 +258,10 @@ xfs_rename(
...
@@ -268,10 +258,10 @@ xfs_rename(
if
(
target_dir_bdp
==
NULL
)
{
if
(
target_dir_bdp
==
NULL
)
{
return
XFS_ERROR
(
EXDEV
);
return
XFS_ERROR
(
EXDEV
);
}
}
src_namelen
=
VNAMELEN
(
src_dentry
);
target_namelen
=
VNAMELEN
(
target_dentry
);
src_dp
=
XFS_BHVTOI
(
src_dir_bdp
);
src_dp
=
XFS_BHVTOI
(
src_dir_bdp
);
target_dp
=
XFS_BHVTOI
(
target_dir_bdp
);
target_dp
=
XFS_BHVTOI
(
target_dir_bdp
);
if
(
DM_EVENT_ENABLED
(
src_dir_vp
->
v_vfsp
,
src_dp
,
DM_EVENT_RENAME
)
||
if
(
DM_EVENT_ENABLED
(
src_dir_vp
->
v_vfsp
,
src_dp
,
DM_EVENT_RENAME
)
||
DM_EVENT_ENABLED
(
target_dir_vp
->
v_vfsp
,
DM_EVENT_ENABLED
(
target_dir_vp
->
v_vfsp
,
target_dp
,
DM_EVENT_RENAME
))
{
target_dp
,
DM_EVENT_RENAME
))
{
...
@@ -286,9 +276,6 @@ xfs_rename(
...
@@ -286,9 +276,6 @@ xfs_rename(
}
}
/* Return through std_return after this point. */
/* Return through std_return after this point. */
#ifdef DEBUG
retries
=
0
;
#endif
/*
/*
* Lock all the participating inodes. Depending upon whether
* Lock all the participating inodes. Depending upon whether
* the target_name exists in the target directory, and
* the target_name exists in the target directory, and
...
@@ -298,15 +285,9 @@ xfs_rename(
...
@@ -298,15 +285,9 @@ xfs_rename(
* does not exist in the source directory.
* does not exist in the source directory.
*/
*/
tp
=
NULL
;
tp
=
NULL
;
do
{
error
=
xfs_lock_for_rename
(
src_dp
,
target_dp
,
src_vname
,
error
=
xfs_lock_for_rename
(
src_dp
,
target_dp
,
src_dentry
,
target_vname
,
&
src_ip
,
&
target_ip
,
inodes
,
target_dentry
,
&
src_ip
,
&
target_ip
,
inodes
,
&
num_inodes
);
&
num_inodes
);
#ifdef DEBUG
if
(
error
==
EAGAIN
)
xfs_rename_agains
++
;
#endif
}
while
(
error
==
EAGAIN
);
if
(
error
)
{
if
(
error
)
{
rename_which_error_return
=
__LINE__
;
rename_which_error_return
=
__LINE__
;
...
...
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