[XFS] remove manual lookup from xfs_rename and simplify locking

->rename already gets the target inode passed if it exits. Pass it down to
xfs_rename so that we can avoid looking it up again. Also simplify locking
as the first lock section in xfs_rename can go away now: the isdir is an
invariant over the lifetime of the inode, and new_parent and the nlink
check are namespace topology protected by i_mutex in the VFS. The projid
check needs to move into the second lock section anyway to not be racy.

Also kill the now unused xfs_dir_lookup_int and remove the now-unused
first_locked argumet to xfs_lock_inodes.

SGI-PV: 976035
SGI-Modid: xfs-linux-melb:xfs-kern:30903a

Signed-off-by: Christoph Hellwig <hch@infradead.org>
Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
This commit is contained in:
Christoph Hellwig 2008-04-22 17:34:06 +10:00 committed by Lachlan McIlroy
parent 579aa9caf5
commit cfa853e47d
8 changed files with 62 additions and 207 deletions

View file

@ -1982,7 +1982,7 @@ again:
ips[0] = ip;
ips[1] = dp;
xfs_lock_inodes(ips, 2, 0, XFS_ILOCK_EXCL);
xfs_lock_inodes(ips, 2, XFS_ILOCK_EXCL);
}
/* else e_inum == dp->i_ino */
/* This can happen if we're asked to lock /x/..
@ -2030,7 +2030,6 @@ void
xfs_lock_inodes(
xfs_inode_t **ips,
int inodes,
int first_locked,
uint lock_mode)
{
int attempts = 0, i, j, try_lock;
@ -2038,13 +2037,8 @@ xfs_lock_inodes(
ASSERT(ips && (inodes >= 2)); /* we need at least two */
if (first_locked) {
try_lock = 1;
i = 1;
} else {
try_lock = 0;
i = 0;
}
try_lock = 0;
i = 0;
again:
for (; i < inodes; i++) {
@ -2406,7 +2400,7 @@ xfs_link(
ips[1] = sip;
}
xfs_lock_inodes(ips, 2, 0, XFS_ILOCK_EXCL);
xfs_lock_inodes(ips, 2, XFS_ILOCK_EXCL);
/*
* Increment vnode ref counts since xfs_trans_commit &